東京Node学園 13時限目

Socket.IO 1.0記念ということで、東京Node学園 13時限目に参加してきた。
直前で補欠繰り上げになって油断していたのと、ヒカリエの入り方が分からない田舎者だったので序盤10分ほど遅刻してしまった。

 

メインの発表はどちらもSocket.IO 1.0の変更部分についてのプレゼンだった。

socket.io v1.0 introduction (@yosuke_furukawaさん)

  • 1.0の特徴として、トランスポート層の刷新(engine.io)、binaryサポート、スケーラビリティなど
  • Redis経由で他のSocket.IOサーバ以外のプロセスから、クライアントに通知を送ることもできるみたい

Socket.IOのスケーリングでは、バックエンドにRedis配置するのは鉄板のような感じだった。

サーバの振り分けは、別ポートで起動したプロセスにip_hashで振り分ける方法が紹介されていた。cluster使う場合にはsticky-session module使う必要があるとの注釈。

0.9ではRedis Storeのpubsubでセッション情報が共有されるので問題がなかった気がするけれど、1.0だとAdapterになった関係でセッション共有できなくなったのかなあ。この辺り、時間がなくて聞けなかった。

Socket.IO 1.0の変更点・内部的な話 (@nkzawaさん)

  • 古川さんの発表が機能面中心だったのに対して、どちらかというと実装よりの解説だった
  • 接続方式がupgrade方式になるという話
    • rememberUpgradeオプションで全開接続時の接続方法を記憶して使ってくれるみたい
    • 接続が切れてしまうような環境で、前回と同じ接続方式で繋げる保証があるのか微妙な気もしたので、有効に機能するのか判断しかねる感じはある
  • 処理のフックはmiddlewareとして汎用化
  • binaryサポートはWebSocketまたはxhr2で接続時に有効(これ以外でもBASE64エンコードで透過的に利用は可能. 便利)
    • メモリ上にすべて載るので大容量データの送信には不向き
    • stream送信サポートの予定があるらしい
  • Storeに代替としてAdapter
    • broadcastしかサポートしなくなった代わりに、サーバ毎にデータを共有・保持しなくなったのでスケーリングしやすくなったとのこと
  • プロトコルの話
    • engine.ioへの移行に伴うプロトコル変更かと思っていたけど、binaryサポートのために大きく変更されたとのこと
    • 0.9系と1.0系では互換性がないので、クライアントとサーバ同時に移行する必要がある

やはり気になるところはAdapter周りの話で、Adapterがデータの配信を仲介するだけの役割しか持たないとすると、セッション情報やルーム情報が共有されなくなるような気がするので、0.9までの構成では動作しなくなるのかなあと思う次第で。検証しないとなのだなあ。

LT

いくつかあった発表の中で、とりわけ気になったのは chest.js の発表。 

bower.jsonとかGruntfileとか、各種メタファイルを一元管理して、インストールなんかも一括で実行できるようにしてくれるツールだった。救いを感じる。

懇親会

何人かの方と話して、Node.jsどこもサーバとしてプロダクトに使っているところは少なくて、ビルドツールやhubot実行環境として使われていることが多いという雰囲気だった。

Socket.IO 1.0になってからメモリリーク問題どうなったのか聞いてみたけれど、まだ本格的に使っている人もいなくてよく分からないという空気を感じた。メモリリーク問題、0.9だと比較的深刻かつメジャーな問題として皆わいのわいのしてたけど、1.0になって言及している人が誰もいないの、禁則事項なのかと思うくらい怖い。

寝不足で食欲なかったので寿司食べられなかったのが悔やまれた。