【node.js】サーバサイドjavascript 4【io.js】 [無断転載禁止]©2ch.net
レス数が950を超えています。1000を超えると書き込みができなくなります。
なんでって20年以上も歴史のある言語で産まれたときとは用途も規模も全然違ってるからな JavaScriptは言語仕様が使いにくいとは思う
小規模なら使いやすいかというと全然そんなことない 言語仕様に難しいところはない。
難しいと思う所言ってみな? プロトタイプベースなところ
使いやすいと思ったことがない >>896-897
仕様が難しいというのと馬鹿の扱いが難しいのは別の話だな ES2015に従えばプロトタイプってことを意識することはないかな。
既存のクラスにメソッド追加したいときとかなら意識するけども。 >>902
prototypeを使って簡単なことをするのと
prototypeを使って複雑なことをするのでは
当たり前だけど難易度が違うのさ
既存のクラスにメソッドを追加するのは、
prototypeの簡単な使い方に含まれる
意味はわからなくてもいいから、こういう書き方をすればOK
程度の説明だけでもクラスにメソッドを追加することはできる クラスだけじゃなく手続き型っぽくも書いたり
はたまた関数型っぽくも書いたりするとこがどう書いていいか分からなくて難しいってことなんじゃない?
凄く冗長に厳かに書いたかと思えばハッキ―なテクニックも使ったりもするしね
世の中には「良い書き方は1つ」を目指してる言語もあるけどJSはその対極だからね
標準ライブラリが少ないという点もそう
俺はそういう点こそが好きだけどね OOPが常に最適解ではないというのは衆知の事実だしな。
俺は基本関数型風で書くのが好みで、データ型にtsのinterfaceが使えれば充分だ。 node-redを使ってるんですが
フローって作成するとメモリに常駐するんですか?
作れば作るほど実行してなくても他のフロー処理速度は遅くなっていきますかね? パイプ演算子追加されれば関数型っぽく書くのが楽になるんだけどね
現状じゃ括弧のネスト増えるからとてもじゃないけど書けない 関数の合成も完結に書きたいしimmutableなデータ構造もネイティブにサポートして欲しいし
そしたらパターンマッチも不可欠だし
関数型への道は険しい
Elm使え ES提案中のパイプライン演算子は当分奇抜な草案扱いだったが
|>await|>など提案によりStage1の中ではHotになりつつある
あとは?を絡めた関数定義を詰めるのと、Mixin周りの提案が勝負
そこをもう少しでも詰めればStage2まではいけるが、Stage3にはawaitの様なパンチが必要
頑張れ >>907
パイプだろうがドットだろうが大差ないだろw
どうせ一行が長くなったら改行するんだから
つまり
foooooooooo()
| baraaaaaaaaaaaa()
| bazzzzzzzzzzzzzzz()
でも
foooooooooo()
.baraaaaaaaaaaaa()
.bazzzzzzzzzzzzzzz()
でも同じだろと
foo() | bar() | baz() でも
foo().bar().baz() でも同じだろと >>910
いや、メソッドじゃなくて関数
bazzzzzzzzzzzzzzz(baraaaaaaaaaaaa(foooooooooo()))
と
foooooooooo()
|> baraaaaaaaaaaaa()
|> bazzzzzzzzzzzzzzz()
じゃ後者がいいやん?
メソッドはクラスインスタンスに対してしか使えないけど、クラスインスタンスだとprototypeの関係でObject.assignなどが使えなくて不変プログラミングがやりにくいからね >>910
>>911
パイプの方が可読性高いだけでもいいわ
メソッドチェーンは読みにくくなるから嫌い https://www.npmjs.com/package/babel-plugin-pipe-operator
babel-plugin-pipe-operator
Overload the pipe operator (|) to provide Elixir/F#/Shell-like behavior
これ使えば今すぐ使えるのかな? A | B | C
たぶん、パイプだと並行処理する
1. Aが最初の1KBを処理する
2. 1の出力を、Bが処理する。同時に、Aは次の1KBを処理
3. 2の出力を、Cが処理する。同時に、A, Bは次の1KBを処理 これの第2引数って{anyway:true}みたいなのを渡せばいいんですか?
https://i.imgur.com/0gmvmSq.png socket.io 2.0.4で指定したルーム内の全てのソケットもしくは
ソケットIDを取るにはどうしたらいいですか?
socket.io 0.9.6ではio.sockets.clients(ルーム名)で取れていたのですが、
同じようなことを2.0.4でしたいです。 自己解決しました。
socket.ioのgithubに行ったら詳しいドキュメントがありました。 JavaScriptエンジン向けのポータブルなCommonJS実装ってどこかにないかな。
ピュアJSのモジュールシステムというとRequireJSがあるけど、あっちはいわゆるAMDだよね。
CommonJS使いたいとなるとやっぱりBrowserifyやWebpackとかしかないのかな。 一年くらい前にブラウザのSW上に実装した記事をどっかで見たな console.logを自前で実装しているんだけど、%cの扱いをどうしようか迷っている。
一応解釈だけして引数を無視するのと%c自体無視するのとどっちがいいかな。
Node.jsは後者みたいだけど。 あぁそうか、Node.jsを前提しているコードで%cを使うことはまずないだろうから
とりあえず前者にしておけばいいんだな。 クライアントサイドjavascriptのスレってどこにあるんですか?
WebProg板にあるのかと思いきやあっちもサーバサイドだし child_process.spawnSync()はプロセスの終了を待ち合わせるけど、workerにはそういう
スレッドのjoin()のように待ち合わせる機能はないのかな。 workerってWebWorkerのこと?
それならSharedArrayBufferとAtomics APIでできるよ
ただCPU脆弱性問題で今は無効にされてる サーバーサイドでそれ無効にする必要ある?
Webブラウザは様々なサイトのコードを実行するから
対策が必要だろうが
サーバーにハッカーのコードを仕込まれたらその時点でもう終わってるじゃん >>929
いつの間にサーバーOS=シングルユーザーOSになったんだよw
OSっていうのは複数の人が自分の権限で自分のコードを実行するもんだろ 自鯖レン鯖ならともかくコンテナやVPSでメモリ共有する環境もあるしな 他のプロセスのメモリー内容まで簡単に読みに行けちゃうのはメルトダウンだけだよね? http://blog.trendmicro.co.jp/archives/16735 読んだだけの
大雑把な理解だが、
カーネルのメモリを覗けるのがメルトダウン
同じコードを共有した他のプロセスのメモリを覗けるのがスペクター
だと思ってる
メルトダウンはカーネルのメモリを覗けるものだから
カーネルが覗かれないように対策できる
スペクターはアプリが覗かれないように対策する必要があるが
その必要があるのは、例えばブラウザのような同じブラウザ上で
別々の人が作った任意のコードを実行するようなものだから
攻撃の前提を満たすのが難しい >>933
この記事はいいね。
> その必要があるのは、例えばブラウザのような同じブラウザ上で
> 別々の人が作った任意のコードを実行するようなものだから
この場合のコードは実行コードの意味だろうから、つまりは同じDLLをリンクしてたらアウトで、
Linuxならlibstdcやlibmとか、ほぼ全部のアプリが使ってるだろうしアウトじゃね?と思うが。
同じアプリである必要はないはずよ。 Spectreの2つの亜種のうち
1つは同じプロセスの内容だけを覗けて
もう一つは他プロセスの内容を見れるが、スーパーユーザー権限が必要って書いてあるようだけど? Spectreは2つ組み合わせて使わないと意味がない 一度でもasync/awaitを使ってしまうと、もう元には戻れない
楽すぎるぅぅぅぅぅ 単発非同期にはasync-awaitで十分便利だけど
イベントのようなものを扱うのはまだまだ難しい
まず値が複数あるということ
一応for-awaitはあるけどreturn時に特別な最終処理を行いたい場合は
結局done:trueを見ないといけないから使えない
また、イベントって標準on〜も結構な工夫がされてるけど、
イベントが起きた直後にセットしたハンドラで受け取りたいかどうかっていう問題がある
この辺り最近ずっと個人的に研究してるが容易ではない 最近node.jsを勉強しています。
socket.ioで質問なのですが、何か非同期処理していて接続が切れた場合、再接続したら
その処理完了のメッセージは受け取れるのでしょうか、それとも接続が切れた段階で、キャンセルされますか? スマホでアクセスポイントが変わったりした場合、一回切れますよね? 同じ切れると言っても切れてる時間の長さとか再接続でIPも変わるときと変わらない時でも違うんじゃね TCPかUDPかとかでも違うんだろうけど
socket.ioがどっちかは忘れた socket.ioってクッキーみたいので、セッションID維持してて
切れても安心みたいな感じじゃないんですか? node.jsって人気ないな〜
解説ブログは古いし、間違ってるし、
こんなんで作ったらバグだらけやん 結局、どう使うべきかわからないというのが問題なんじゃないかな
拡張機能があるけど、個々の機能はわかるけど、うまくピースがはまらないイメージ プログラムの設計思想がぴんとこない
非同期で時間のかかることやらせるならsocket.ioは必須なの?
切断したときにどう復旧させるの?
自分は何者で何をしてたかの情報をうまく組み合わせる必要ない? どう使うべきかじゃなくて
自分が作りたいものを作る時に何を使うかだろ そこが想像できない、よくわからないから抜け出せないので、使う候補に上がってこない 世界的な事例のほとんどは
バックエンドをマイクロサービス化
↓
その前段のbffにnode.js
これだからモノリシックなシステムには無縁 bffでnode.js使うところはssrもやってるからgoは選ばれないんじゃね
結局そういうアーキテクチャの要請があってプロダクトが選ばれる isomorphic javascriptでググれ SNSのバックエンドをExpressオンリーにするのって無理かな >>962
phpでもrubyでもいけるのにexpressじゃ無理かもしれないと思った理由は? 一つのexpressにHTTPdからAPI鯖まで全部詰め込んでもいいんだぞ >>963
あまりそういう話を聞かないから
不都合全く無いの? expressはあんまり高水準のフレームワークじゃないしormはsequelizeくらいしかないしメリットなさげじゃね node.jsでウェブサーバやる利点って何?超使いづらいんですけど meteor.jsとか見てるとjsのメリットすごいけどね >>967
一人しか利用しないなら使わなくていいんじゃないの。 素朴な疑問だけど
ここのみんなは node.js でどんなサービス作ってるの? 特定業種にiPadごと配るアプライアンス的なサービスのBff
なので事例には出しにくいけどバッチリ使ってる >>973
そのiPadに入ったアプリが通信する先のサービスってこと?
あとBffって何ですか?
無知ですまん ありがとう、翻訳して読んだりしました
難しい
gateway とか dispacher的なもの?
nodeとnginxの関係を見た時nginxがbffの位置づけ?
見当違いならほっといてください socketを使う必要がってnode+expressがやりやすそうと考えて
独学でnode.js始めて(独学)1年くらいです
sessionにredis使ってまして
通常のhttpとsocketでの共有が面倒なのですが
皆さん、どんな方法使ってます? socketってwebsocketのこと?
node.jsではnetモジュールが提供するtcp用のapiが本来のsocketだから変な略し方すると話が通じないよ
websocketならhttpで始まるからセッションは普通に共有できるはず
websocketを使うのにsocket.ioを使ってるならそれも書いた方がいい
最近はsocket.io使ってる人が少なそうだからレスが付くかはわからんけど >>978
ありがと&ごめん
socket.ioを使ったwebsocketでした
websocket側からsessionのハンドリングに自分は
var sockeio = require('socket.io')(server, {'transports': ['websocket']});
var io = sockeio.of(ns).on('connection', function(socket) {
/** socket.request.session;
* で拾える
*/
});
てなことしてまして、拾うのは楽なんですが
session save するのに
redisの該当データをupdate(set)するってことしてます
これ普通ですか?アホですか
あとsocket.io使われなくってるのは何故? こういうユーティリティで便利なのがないかさがしてみるのも一手
https://www.npmjs.com/package/express-socket.io-session
昔はwebsocket使えないブラウザが多かったから他のプロトコルにフォールバックしてくれるsocket.ioが重宝されてたらしい
今はwebsocket使える前提でいいからフォールバックは不要なので豊富な機能が不要ならwsとかシンプルなモジュールで十分って感じ
再接続とか考えるとsocket.io便利そうだけどね >>980
express-socket.io-session 良さそ気
wsっかぁ、
自分を慰める理由が欲しいんだけど
room機能実装するならwsじゃなくてsocket.ioが楽? roomとか必要ならsocket.ioでいいんじゃない
よく聞くのはそれと再接続目当てな希ガス お題が単に「room機能をとにかく楽に実装したい」ならgun.jsとかのほうが楽やで リアルタイムwebをいじりたいならmeteor.jsに乗っかるのも一つの手 ビルドで使ってるgypがpython3に対応してないって話じゃね
開発元のgoogleでは対応済みなん?
まだならnode側じゃどうしょうもない issue検索してみたけどgypへの依存なくせやって話もしつこく何回も立ってたんだね v8のビルドがgypならそれも無理がありそうだがなんか代替案出てるんけ? 今日ジュンク堂行ったらnode.jsの本2つしかなかった。
しかも入門書、やっぱりnode.jsオワコン?
他にwebsocketできるものなんてあるの? レス数が950を超えています。1000を超えると書き込みができなくなります。