狠狠撸

狠狠撸Share a Scribd company logo
NodejsによるWebsocket入門
早川 大貴
Websocketとは?
XMLHttpRequestの欠点を解決する技術とし
て開発されており、現在のComet等に取って
代わることを目標としている。
WebSocketでは、サーバとクライアントが一
度コネクションを行った後は、必要な通信を
全てそのコネクション上で専用のプロトコル
を用いて行う。
引用元: http://ja.wikipedia.org/wiki/WebSocket
Comet
サーバで発生したイベントをクライアントか
らの要請なしにクライアントに送信すること
ができる。
Comet アプリケーションは Ajax と Long
polling を使用してサーバ上の新規データを
取得する。
引用元: http://ja.wikipedia.org/wiki/Comet
図にするとこんな感じ
贬罢罢笔ロングポーリング
Websocket
Cometの問題点
?Cometはロングポーリングを使用して行う
(HTTP接続のタイムアウトがあるので接続が切れたら再接続
が必要)
?多くの実装では擬似的に双方向通信を行うため通信が発生
するごとにTCPのハンドシェイク手続きを再度行う必要があ
る
?HTTPコネクションを長時間占有するため帯域が圧迫され
る
引用元: http://ja.wikipedia.org/wiki/Comet
http://ja.wikipedia.org/wiki/WebSocket
奥别产蝉辞肠办别迟サンプル
チャットアプリを作るときに
Websocketが提供してくれない機能
?ルーム管理機能
?イベントのハンドリング
!
…例えばいくつかのチャット部屋があってそれぞれの
チャット部屋に誰が入室しているかを管理する機能を
アプリ側で実装しなければならない
socket.ioが独自に提供してくれる機能
?namespace機能(ルーム管理機能)
?subscribeの実装
?イベントのハンドリング
など…
最近socket.io ver 1.0 がリリースされたので更にいろんな機能
が実装されている
http://yosuke-furukawa.hatenablog.com/entry/
2014/05/30/093103
とりあえず
Websocket
+
独自ルーム管理機能
を使ったチャットアプリを実装
してみた
https://github.com/bells17/node_websocket_cui_chat_sample
まとめ
?Websocketを使えばサーバー?クライアント間の
双方向の通信が簡単に実現できる
?ルーム管理機能やイベントのハンドリングなどはア
プリ側で実装する必要がある
?socket.ioには上記機能が実装されているので楽に
開発ができる(ただしメモリーリーク問題がある)

More Related Content

狈辞诲别箩蝉による飞别产蝉辞肠办别迟入门