【node.js】サーバサイドjavascript 4【io.js】 [無断転載禁止]©2ch.net

レス数が950を超えています。1000を超えると書き込みができなくなります。
2016/04/11(月) 16:28:34.52ID:ORuOCkHy
pythonやrubyやPHPと同じ土俵でjavascriptが使えるようになりました。
サーバサイドjavascriptについて語りましょう。

node.js - googleが開発したV8エンジン上で実行できる処理系
http://nodejs.org/
io.js - node.js 互換で Joyent の影響からの脱却を目指す処理系
http://iojs.org/
Rhino - JVM上で実行できる処理系
https://developer.mozilla.org/ja/Rhino

io.js の経緯
http://stackoverflow.com/questions/27309412/what-is-the-difference-between-node-js-and-io-js
javascriptはrubyと比較してもかなり速い
http://shootout.alioth.debian.org/u32/benchmark.php?test=all&;lang=v8&lang2=yarv
基礎から学ぶNode.js
http://gihyo.jp/dev/serial/01/nodejs
node.jsの概要とアプリケーション開発の準備
http://gihyo.jp/dev/serial/01/realtimeweb/0002

前スレ
【node.js】サーバサイドjavascript 3【io.js】(c)2ch.net
http://echo.2ch.net/test/read.cgi/tech/1419673207/
【node.js】サーバサイドjavascript 2【Rhino】
http://peace.2ch.net/test/read.cgi/tech/1358937029/
【node.js】サーバサイドjavascript【Rhino】
http://toro.2ch.net/test/read.cgi/tech/1310087535/
884デフォルトの名無しさん
垢版 |
2017/12/01(金) 20:58:49.48ID:dEoQxhVh
>>883
うむ
2017/12/02(土) 05:34:12.07ID:IJ6GXagf
サーバサイドでreactってどういう意味?
2017/12/02(土) 08:11:38.76ID:zj58uySz
ssrじゃね?
2017/12/02(土) 12:17:05.09ID:JzqKudWn
ssrっていらなくね?
2017/12/02(土) 13:37:03.76ID:iXlrNF2g
ツイッターもインスタもNetflixもやってるぞ
889デフォルトの名無しさん
垢版 |
2017/12/04(月) 01:47:10.73ID:sdiyRgle
メテオとかいうFWって死んじゃったんですか?
2017/12/04(月) 20:47:28.49ID:EJPuWg3p
全体的に名前空間で仕切られてないこのグダグタnodeライブラリ。
10年後も、その時の最新のnodeで使えるんなほんまに。
2017/12/06(水) 19:36:04.95ID:GgcfIolq
ん? SSRに何か問題でも?
2017/12/06(水) 20:20:27.85ID:MyyqK5wy
鯖側の負荷が増える
893デフォルトの名無しさん
垢版 |
2017/12/12(火) 22:19:31.72ID:gHkSE4eN
node.js難しいっていうイメージだったけど、
JavaScriptがウンコだったってことみたい

なんでこんなに散らかってしまったんだ
せめて書き方を統一しろよ
2017/12/12(火) 23:49:28.08ID:gqOvSsDA
>>893
ESLint使えば?
2017/12/12(火) 23:57:54.77ID:8VRWkTHd
なんでって20年以上も歴史のある言語で産まれたときとは用途も規模も全然違ってるからな
2017/12/13(水) 00:01:47.40ID:pDkqMCU5
JavaScriptは言語仕様が使いにくいとは思う
小規模なら使いやすいかというと全然そんなことない
2017/12/13(水) 23:32:59.98ID:dQY+CYRc
言語仕様に難しいところはない。
難しいと思う所言ってみな?
2017/12/14(木) 01:12:30.76ID:JyoUxFOL
プロトタイプベースなところ
使いやすいと思ったことがない
2017/12/14(木) 01:32:58.14ID:LEbaYuuB
プロトタイプなんて使うことないだろ?
2017/12/14(木) 05:58:01.99ID:fEY/FzHm
>>893
うむ
2017/12/14(木) 05:59:02.65ID:fEY/FzHm
>>896-897
仕様が難しいというのと馬鹿の扱いが難しいのは別の話だな
2017/12/14(木) 10:39:14.62ID:y5gxd1px
ES2015に従えばプロトタイプってことを意識することはないかな。
既存のクラスにメソッド追加したいときとかなら意識するけども。
2017/12/14(木) 20:55:43.66ID:LEbaYuuB
>>902
prototypeを使って簡単なことをするのと
prototypeを使って複雑なことをするのでは
当たり前だけど難易度が違うのさ

既存のクラスにメソッドを追加するのは、
prototypeの簡単な使い方に含まれる
意味はわからなくてもいいから、こういう書き方をすればOK
程度の説明だけでもクラスにメソッドを追加することはできる
2017/12/15(金) 02:24:03.53ID:OK9q/vji
クラスだけじゃなく手続き型っぽくも書いたり
はたまた関数型っぽくも書いたりするとこがどう書いていいか分からなくて難しいってことなんじゃない?

凄く冗長に厳かに書いたかと思えばハッキ―なテクニックも使ったりもするしね
世の中には「良い書き方は1つ」を目指してる言語もあるけどJSはその対極だからね
標準ライブラリが少ないという点もそう

俺はそういう点こそが好きだけどね
2017/12/15(金) 07:18:04.72ID:18KhAamS
OOPが常に最適解ではないというのは衆知の事実だしな。
俺は基本関数型風で書くのが好みで、データ型にtsのinterfaceが使えれば充分だ。
2017/12/15(金) 11:04:58.73ID:vwC80Nto
node-redを使ってるんですが
フローって作成するとメモリに常駐するんですか?
作れば作るほど実行してなくても他のフロー処理速度は遅くなっていきますかね?
907デフォルトの名無しさん
垢版 |
2017/12/15(金) 17:13:59.28ID:WQPs5rl9
パイプ演算子追加されれば関数型っぽく書くのが楽になるんだけどね
現状じゃ括弧のネスト増えるからとてもじゃないけど書けない
2017/12/15(金) 17:30:06.75ID:nGMqwgOn
関数の合成も完結に書きたいしimmutableなデータ構造もネイティブにサポートして欲しいし
そしたらパターンマッチも不可欠だし
関数型への道は険しい
Elm使え
2017/12/15(金) 21:51:56.77ID:OK9q/vji
ES提案中のパイプライン演算子は当分奇抜な草案扱いだったが
|>await|>など提案によりStage1の中ではHotになりつつある
あとは?を絡めた関数定義を詰めるのと、Mixin周りの提案が勝負
そこをもう少しでも詰めればStage2まではいけるが、Stage3にはawaitの様なパンチが必要
頑張れ
2017/12/15(金) 22:47:15.05ID:L7gVN0RS
>>907
パイプだろうがドットだろうが大差ないだろw
どうせ一行が長くなったら改行するんだから


つまり

foooooooooo()
| baraaaaaaaaaaaa()
| bazzzzzzzzzzzzzzz()

でも

foooooooooo()
.baraaaaaaaaaaaa()
.bazzzzzzzzzzzzzzz()

でも同じだろと

foo() | bar() | baz() でも
foo().bar().baz() でも同じだろと
911デフォルトの名無しさん
垢版 |
2017/12/15(金) 23:37:27.58ID:WQPs5rl9
>>910
いや、メソッドじゃなくて関数
bazzzzzzzzzzzzzzz(baraaaaaaaaaaaa(foooooooooo()))

foooooooooo()
|> baraaaaaaaaaaaa()
|> bazzzzzzzzzzzzzzz()
じゃ後者がいいやん?

メソッドはクラスインスタンスに対してしか使えないけど、クラスインスタンスだとprototypeの関係でObject.assignなどが使えなくて不変プログラミングがやりにくいからね
2017/12/15(金) 23:54:55.14ID:SRfxT1c6
>>910
>>911
パイプの方が可読性高いだけでもいいわ
メソッドチェーンは読みにくくなるから嫌い
2017/12/16(土) 00:14:10.39ID:plaGBrRo
https://www.npmjs.com/package/babel-plugin-pipe-operator

babel-plugin-pipe-operator
Overload the pipe operator (|) to provide Elixir/F#/Shell-like behavior

これ使えば今すぐ使えるのかな?
2017/12/16(土) 00:18:33.91ID:ArLhqftT
A | B | C

たぶん、パイプだと並行処理する

1. Aが最初の1KBを処理する
2. 1の出力を、Bが処理する。同時に、Aは次の1KBを処理
3. 2の出力を、Cが処理する。同時に、A, Bは次の1KBを処理
2017/12/22(金) 09:15:33.73ID:8f8y8qIA
これの第2引数って{anyway:true}みたいなのを渡せばいいんですか?
https://i.imgur.com/0gmvmSq.png
2017/12/22(金) 09:37:16.18ID:8f8y8qIA
合ってました自己解決しまひた
917デフォルトの名無しさん
垢版 |
2017/12/22(金) 21:07:59.68ID:dt9jytk4
socket.io 2.0.4で指定したルーム内の全てのソケットもしくは
ソケットIDを取るにはどうしたらいいですか?
socket.io 0.9.6ではio.sockets.clients(ルーム名)で取れていたのですが、
同じようなことを2.0.4でしたいです。
918デフォルトの名無しさん
垢版 |
2017/12/22(金) 23:11:18.78ID:dt9jytk4
自己解決しました。
socket.ioのgithubに行ったら詳しいドキュメントがありました。
2017/12/27(水) 08:03:34.44ID:hw44w6Qj
JavaScriptエンジン向けのポータブルなCommonJS実装ってどこかにないかな。
ピュアJSのモジュールシステムというとRequireJSがあるけど、あっちはいわゆるAMDだよね。
CommonJS使いたいとなるとやっぱりBrowserifyやWebpackとかしかないのかな。
2017/12/27(水) 14:23:29.84ID:LFgX9gcs
一年くらい前にブラウザのSW上に実装した記事をどっかで見たな
2017/12/29(金) 09:12:07.30ID:LK61JUUB
console.logを自前で実装しているんだけど、%cの扱いをどうしようか迷っている。
一応解釈だけして引数を無視するのと%c自体無視するのとどっちがいいかな。
Node.jsは後者みたいだけど。
2017/12/29(金) 12:21:26.51ID:LK61JUUB
あぁそうか、Node.jsを前提しているコードで%cを使うことはまずないだろうから
とりあえず前者にしておけばいいんだな。
2017/12/31(日) 21:37:45.29ID:9jWP4uLU
クライアントサイドjavascriptのスレってどこにあるんですか?
WebProg板にあるのかと思いきやあっちもサーバサイドだし
2017/12/31(日) 22:08:43.06ID:beY0Iyii
これ
http://mevius.2ch.net/test/read.cgi/tech/1417749547/
2017/12/31(日) 23:43:06.40ID:B2mtcXzM
web制作板
2018/01/01(月) 08:44:35.42ID:oE47bkuE
ありがとん
3つめもあるとは想定外でした
2018/01/07(日) 11:33:35.99ID:pcvnpBsv
child_process.spawnSync()はプロセスの終了を待ち合わせるけど、workerにはそういう
スレッドのjoin()のように待ち合わせる機能はないのかな。
2018/01/10(水) 11:06:47.57ID:AcbVN6ZK
workerってWebWorkerのこと?
それならSharedArrayBufferとAtomics APIでできるよ
ただCPU脆弱性問題で今は無効にされてる
2018/01/10(水) 22:10:28.26ID:oFasEgAN
サーバーサイドでそれ無効にする必要ある?
Webブラウザは様々なサイトのコードを実行するから
対策が必要だろうが
サーバーにハッカーのコードを仕込まれたらその時点でもう終わってるじゃん
2018/01/10(水) 22:13:57.25ID:NAqv0WmW
>>929
いつの間にサーバーOS=シングルユーザーOSになったんだよw
OSっていうのは複数の人が自分の権限で自分のコードを実行するもんだろ
2018/01/10(水) 22:57:46.99ID:PVJi42Un
自鯖レン鯖ならともかくコンテナやVPSでメモリ共有する環境もあるしな
2018/01/10(水) 23:40:19.20ID:ejeCAGvR
他のプロセスのメモリー内容まで簡単に読みに行けちゃうのはメルトダウンだけだよね?
2018/01/11(木) 00:49:54.75ID:PrVjW9Sz
http://blog.trendmicro.co.jp/archives/16735 読んだだけの
大雑把な理解だが、

カーネルのメモリを覗けるのがメルトダウン
同じコードを共有した他のプロセスのメモリを覗けるのがスペクター
だと思ってる

メルトダウンはカーネルのメモリを覗けるものだから
カーネルが覗かれないように対策できる

スペクターはアプリが覗かれないように対策する必要があるが
その必要があるのは、例えばブラウザのような同じブラウザ上で
別々の人が作った任意のコードを実行するようなものだから
攻撃の前提を満たすのが難しい
2018/01/11(木) 01:45:26.94ID:zDr2JTOQ
>>933
この記事はいいね。

> その必要があるのは、例えばブラウザのような同じブラウザ上で
> 別々の人が作った任意のコードを実行するようなものだから
この場合のコードは実行コードの意味だろうから、つまりは同じDLLをリンクしてたらアウトで、
Linuxならlibstdcやlibmとか、ほぼ全部のアプリが使ってるだろうしアウトじゃね?と思うが。
同じアプリである必要はないはずよ。
2018/01/11(木) 09:18:34.65ID:gamfIHe5
Spectreの2つの亜種のうち
1つは同じプロセスの内容だけを覗けて
もう一つは他プロセスの内容を見れるが、スーパーユーザー権限が必要って書いてあるようだけど?
2018/01/11(木) 14:51:21.63ID:xvA5vOWN
Spectreは2つ組み合わせて使わないと意味がない
2018/01/13(土) 20:38:05.97ID:iJyUFjEF
一度でもasync/awaitを使ってしまうと、もう元には戻れない
楽すぎるぅぅぅぅぅ
2018/01/13(土) 20:47:08.73ID:/br76GKn
便利やろ?babelさまさまやで
2018/01/13(土) 22:03:52.60ID:xaNBQnI8
単発非同期にはasync-awaitで十分便利だけど
イベントのようなものを扱うのはまだまだ難しい
まず値が複数あるということ
一応for-awaitはあるけどreturn時に特別な最終処理を行いたい場合は
結局done:trueを見ないといけないから使えない
また、イベントって標準on〜も結構な工夫がされてるけど、
イベントが起きた直後にセットしたハンドラで受け取りたいかどうかっていう問題がある
この辺り最近ずっと個人的に研究してるが容易ではない
2018/01/24(水) 19:25:24.68ID:BUPTScBe
最近node.jsを勉強しています。
socket.ioで質問なのですが、何か非同期処理していて接続が切れた場合、再接続したら
その処理完了のメッセージは受け取れるのでしょうか、それとも接続が切れた段階で、キャンセルされますか?
941デフォルトの名無しさん
垢版 |
2018/01/24(水) 19:35:05.25ID:yxm2qYfd
>接続が切れた

もう少し詳しく
2018/01/24(水) 19:42:51.25ID:BUPTScBe
スマホでアクセスポイントが変わったりした場合、一回切れますよね?
943デフォルトの名無しさん
垢版 |
2018/01/25(木) 11:23:58.90ID:zPND7U3x
同じ切れると言っても切れてる時間の長さとか再接続でIPも変わるときと変わらない時でも違うんじゃね
944デフォルトの名無しさん
垢版 |
2018/01/25(木) 11:26:00.59ID:zPND7U3x
TCPかUDPかとかでも違うんだろうけど
socket.ioがどっちかは忘れた
2018/01/25(木) 19:29:10.53ID:Jk7QmDIY
socket.ioってクッキーみたいので、セッションID維持してて
切れても安心みたいな感じじゃないんですか?
2018/01/26(金) 05:42:52.58ID:XyEr3Esl
やってみろ
2018/02/01(木) 14:15:55.68ID:zVItOEuq
node.jsって人気ないな〜
解説ブログは古いし、間違ってるし、
こんなんで作ったらバグだらけやん
948デフォルトの名無しさん
垢版 |
2018/02/01(木) 14:21:50.49ID:XMp5TkVS
はげそれ
ブームは去った
2018/02/01(木) 19:35:39.75ID:3VWe7l68
>>947
今は何が流行ってんの?
2018/02/01(木) 20:52:06.68ID:6/askoF7
unity
2018/02/01(木) 21:34:46.61ID:lSl6eIsr
golangに持って行かれたね
2018/02/02(金) 07:24:52.85ID:E+B1ekpI
結局、どう使うべきかわからないというのが問題なんじゃないかな
拡張機能があるけど、個々の機能はわかるけど、うまくピースがはまらないイメージ
2018/02/02(金) 07:41:34.72ID:sggyuymU
juliaもそうだった
2018/02/02(金) 19:30:20.18ID:E+B1ekpI
プログラムの設計思想がぴんとこない
非同期で時間のかかることやらせるならsocket.ioは必須なの?
切断したときにどう復旧させるの?
自分は何者で何をしてたかの情報をうまく組み合わせる必要ない?
2018/02/02(金) 22:13:57.33ID:ISpZH99S
どう使うべきかじゃなくて
自分が作りたいものを作る時に何を使うかだろ
2018/02/03(土) 07:40:05.67ID:dVw1phCl
そこが想像できない、よくわからないから抜け出せないので、使う候補に上がってこない
2018/02/03(土) 09:00:51.63ID:C+glEnt3
世界的な事例のほとんどは

バックエンドをマイクロサービス化

その前段のbffにnode.js

これだからモノリシックなシステムには無縁
958デフォルトの名無しさん
垢版 |
2018/02/03(土) 09:43:35.86ID:qWVkS+Es
それだとgolangに負けるな
2018/02/03(土) 09:48:29.04ID:q+B7XjZz
bffでnode.js使うところはssrもやってるからgoは選ばれないんじゃね
結局そういうアーキテクチャの要請があってプロダクトが選ばれる
2018/02/03(土) 10:20:29.26ID:k4L1joBU
bffとssrって関係あるかねぇ?
2018/02/03(土) 10:30:11.33ID:lOPjGEYQ
isomorphic javascriptでググれ
2018/02/04(日) 10:07:02.98ID:iEv00Bkz
SNSのバックエンドをExpressオンリーにするのって無理かな
2018/02/04(日) 14:58:55.91ID:WVo2r3Ik
>>962
phpでもrubyでもいけるのにexpressじゃ無理かもしれないと思った理由は?
2018/02/04(日) 15:27:37.16ID:B22IaXtA
一つのexpressにHTTPdからAPI鯖まで全部詰め込んでもいいんだぞ
2018/02/04(日) 21:03:28.89ID:iEv00Bkz
>>963
あまりそういう話を聞かないから
不都合全く無いの?
2018/02/04(日) 21:25:10.40ID:UUFlqCAw
expressはあんまり高水準のフレームワークじゃないしormはsequelizeくらいしかないしメリットなさげじゃね
2018/02/05(月) 07:30:15.23ID:GXsl78kw
node.jsでウェブサーバやる利点って何?超使いづらいんですけど
2018/02/05(月) 12:00:21.59ID:ozQGTy2c
使う側は意識することないだろ
2018/02/06(火) 06:03:09.31ID:xat7U2Z1
meteor.jsとか見てるとjsのメリットすごいけどね
2018/02/06(火) 06:07:24.84ID:BAsI0MB0
ssrでしょ
うん……
2018/02/07(水) 09:30:35.59ID:5vmiY3qq
>>967
一人しか利用しないなら使わなくていいんじゃないの。
2018/02/07(水) 18:55:54.33ID:GPioIT5w
素朴な疑問だけど
ここのみんなは node.js でどんなサービス作ってるの?
2018/02/07(水) 19:02:22.99ID:ob9DrvK1
特定業種にiPadごと配るアプライアンス的なサービスのBff
なので事例には出しにくいけどバッチリ使ってる
2018/02/07(水) 19:11:11.32ID:GPioIT5w
>>973
そのiPadに入ったアプリが通信する先のサービスってこと?
あとBffって何ですか?
無知ですまん
2018/02/07(水) 19:19:56.30ID:IITgqAFh
Backends for Frontends
https://samnewman.io/patterns/architectural/bff/
2018/02/07(水) 20:36:41.69ID:GPioIT5w
ありがとう、翻訳して読んだりしました
難しい
gateway とか dispacher的なもの?
nodeとnginxの関係を見た時nginxがbffの位置づけ?
見当違いならほっといてください
977デフォルトの名無しさん
垢版 |
2018/02/11(日) 15:29:51.01ID:6yH3qsLl
socketを使う必要がってnode+expressがやりやすそうと考えて
独学でnode.js始めて(独学)1年くらいです

sessionにredis使ってまして
通常のhttpとsocketでの共有が面倒なのですが
皆さん、どんな方法使ってます?
2018/02/11(日) 15:43:11.62ID:xSFjw/ao
socketってwebsocketのこと?
node.jsではnetモジュールが提供するtcp用のapiが本来のsocketだから変な略し方すると話が通じないよ
websocketならhttpで始まるからセッションは普通に共有できるはず
websocketを使うのにsocket.ioを使ってるならそれも書いた方がいい
最近はsocket.io使ってる人が少なそうだからレスが付くかはわからんけど
2018/02/11(日) 16:01:04.40ID:6yH3qsLl
>>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使われなくってるのは何故?
2018/02/11(日) 16:29:55.16ID:d+jiviOC
こういうユーティリティで便利なのがないかさがしてみるのも一手
https://www.npmjs.com/package/express-socket.io-session

昔はwebsocket使えないブラウザが多かったから他のプロトコルにフォールバックしてくれるsocket.ioが重宝されてたらしい
今はwebsocket使える前提でいいからフォールバックは不要なので豊富な機能が不要ならwsとかシンプルなモジュールで十分って感じ
再接続とか考えるとsocket.io便利そうだけどね
2018/02/11(日) 16:40:57.21ID:6yH3qsLl
>>980
express-socket.io-session 良さそ気

wsっかぁ、
自分を慰める理由が欲しいんだけど
room機能実装するならwsじゃなくてsocket.ioが楽?
2018/02/11(日) 16:46:20.51ID:XUA6USjD
roomとか必要ならsocket.ioでいいんじゃない
よく聞くのはそれと再接続目当てな希ガス
2018/02/11(日) 16:47:48.35ID:A30L58fq
お題が単に「room機能をとにかく楽に実装したい」ならgun.jsとかのほうが楽やで
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況