socket.ioのイベント一覧

昨日からnode.js+socket.ioでチャットアプリを作り出しました。
簡単に作れて楽しいのだけどサーバ側のeventで"message"しか受け取れないのかしらと疑問に思ってどうせならついでにsocket.ioのドキュメントをちょっと見てみました。ドキュメントは4/14日時点のgithubにあがっているものです。

socket.ioって?

シンプルなHTTP Socketインタフェースです。簡単にリアルタイム接続処理をかけるようになります。socket.ioはリアルタイムプロトコルをwebsocketAPIみたいに利用できるのでそのあたりを気にしないとこがいいんだよ。

サポートプロトコル

  • WebSocket
  • Adobe Flash Socket
  • ActiveX HTMLFile (IE)
  • XHR with multipart encoding
  • XHR with long-polling
  • JSONP polling (for cross-domain)

その他

  • ActionScriptがプロキシの配下で動かない事がよく知られています。すなわちそれはCONNECT HTTPメソッド経由でアクセスできないことを意味します。このあたりは別の方法を考えようと思っています。
  • 接続に成功した場合、そのプロトコルはcookieに保存され、次回アクセス時に利用されます。

注意

もし別ドメインからswfファイルを受け取る場合 WEB_SOCKET_SWF_LOCATION は別の不安定バージョンを利用してください。


Documentation

io.Socket
new io.Sokcet(host, [options]);
options:
  • secure
false

https使うときはtrueなんだとおもう

  • port
Current port or 80

socket.ioサーバが利用するポート(default: document.location.port)

  • resource
socket.io

どんなHTTPサーバでもリアルタイムでないリクエストを受け付けたままsocketリクエストを受けれるようになります。

  • transports
['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling']

プロトコルリスト。

  • transportOptions
 {
      someTransport: {
          someOption: true
      },
      ...
  }

プロトコルごとにオプションを設定可能

  • rememberTransport
true

接続したプロトコルを覚えておくかどうか(cookieを利用)

  • connectTimeout
5000

millisecでかく

  • tryTransportsOnConnectTimeout
true

connectTimeoutが発生したときに別プロトコルで接続するかどうか

  • reconnect
true

接続が切れたときに再度接続しにいくかどうか

  • reconnectionDelay
500

サーバに再度接続しにいくときにまつ時間

  • maxReconnectionAttempts
10

接続の試行回数

Properties:
  • options

デフォルトのオプションを見る。

  • connected

サーバと接続されていたかどうか(true/false)

  • connecting

サーバと接続されているかどうか(true/false)

  • transport

どのプロトコルで接続しているか

Methods:
  • connect

接続を実施

  • send(message)

文字列データをサーバに送る

  • disconnect

接続をきる

  • on(event, λ)

listenerイベントの登録

  • removeEvent(event, λ)

eventからλ処理を削除する

Events:
  • connect

接続が確立されたとき

  • connecting(transport_type)

引数で指定したtranport_typeでの接続に失敗したとき

  • connect_failed

connectTimeoutによって接続失敗されたときに発生するイベント。
tryTransportsOnConnectTimeoutを設定していた場合全てのtransportに失敗した場合のみ発生する。

  • message(message)

サーバからリクエストがきたとき

  • disconnect

接続が閉じられたとき

  • reconnect(transport_type, reconnectionAttemps)

接続が再び確立されたとき

  • reconnecting(reconnectionDelay, reconnectionAttemps)
  • reconnection_failed

。。。

messageの中でがんばれってことか。まぁそうかという気もしてきた。

[追記]

見逃していたけど本家のページにNode.js以外でも動くって書いてある。
対象は以下。

ruby動きそう!