Skip to content

Instantly share code, notes, and snippets.

@asufana
Last active January 3, 2016 02:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asufana/8398547 to your computer and use it in GitHub Desktop.
Save asufana/8398547 to your computer and use it in GitHub Desktop.
WebSocket勉強会

WebSocket

  • サーバとブラウザ間で双方向通信(サーバからのPUSH)を可能とする規格
  • AJAXのようなHTTPを使った疑似PUSH通信ではなく、本物のPUSH通信が可能
  • つまりリアルタイム通信ということ

デモ

PivotalTracker的なリアルタイムタスク管理

PlayFrameworkでのデモ実装

類似技術との比較

参考: https://github.com/kzkn/writing/blob/master/websocket/text.md

AJAX

  • ブラウザ側から任意のタイミングでXMLHttpRequestを送信する
  • いわゆるポーリング

Comet

  • コールバック用のリクエストを送信しておく
  • サーバはリクエストを保持しておいて、イベント時にそのリクエストのレスポンスとしてメッセージを返却する
  • クライアントはまたコールバック用のリクエストを送信しておく(1イベントに1リクエスト必要)

WebSocket

  • ひとつのコネクションを張ることで、なんどでもやり取り可能
  • 独自プロトコル

Webチャットの歴史

CGI時代

  • METAタグなどで定期的にポーリングして再描画
  • ユーザ:画面がちらちらしてうぜー、2秒も待ってられないから更新ボタン押しちゃうぜ

AJAX時代

  • XHRで定期的にポーリング、更新があれば画面再描画
  • ユーザ:2秒も待ってられないから更新ボタン押しちゃうぜ

Comet時代

  • 誰かが発言したら自動的に画面再描画
  • ユーザ:これいいじゃん
  • サーバ:ずっとリクエスト保持しとくのでコストかかる。。

バイナリもいける

利用場面

チケット管理

  • PivotalTracker
  • 複数人でチケット管理

ログのリアルタイム表示

通知いろいろ

  • Backlogのあれ

スマートテレビ

  • ひかりTVのリモコンアプリ

サービスもあるよ

サーバなしでWebSocketする

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment