[HTML5] socket.ioで接続情報を取得したり接続種類を制限したりする

socket.ioの接続方式

nodeでWebSocketを使用する環境ではスタンダードとなっているsocket.ioですが、
これはクライアントに応じて接続方式を切り替えてくれるという機能を持っています。
接続種類は下記のとおり。

  • WebSocket
  • Adobe® Flash® Socket
  • AJAX long polling
  • AJAX multipart streaming
  • Forever Iframe
  • JSONP Polling

さまざまな接続方式を選択してくれるのはいいのですが、場合によっては特定の接続に制限したい場合もあります。
本記事ではsocket.ioにおいて接続を制限する方法を紹介します。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.9
  • node.js : v0.10.21
  • socket.io: 0.9.16

node.jsについては公式ページ等を参考にしてインストールしておいてください。
そして、npmを使用してsocket.io(0.9x)もインストールしておきましょう。

% npm install socket.io

socket.ioで接続を制限してみよう

socket.io 0.9xでは、socket.ioのオブジェクトに対してset関数を使用することでいろいろな設定を行うことができます。
下記のように、transportsという名前に対して接続を許可したい配列を指定することができます。

・
・
var httpServer = http.createServer(function(req,res) {・・・});
var io = require('socket.io').listen(httpServer);
io.configure('prod', function () {
    //接続をWebSocketとflashソケットだけに制限する
    io.set('transports', [
        'websocket'
        , 'flashsocket'
    ]);
});
・
・

デフォルトではすべての接続方式が許可されています。状況に応じて制限しましょう。
ちなみに、socket.io 1.0ではconfigureとsetは使用されず、Adapterを使用する方式になったようなので、
1.0を使用する際には注意してください。

接続しているクライアントの接続種類を知るには?

では次に、現在接続しているクライアントが、どのような手段で接続しているか確認してみます。
次のように、clients関数でクライアント情報を取得し、クライアントIDをキーにして取得することができます。

//接続しているクライアント情報取得 var clients = io.sockets.clients(); //接続しているクライアント数取得 var count = clients.length;

if (count !== 0) { for (var i = 0; i < count; i++) { console.log("クライアントの接続方法:" + io.transports[clients[i].id].name]); } } [/javascript]

まとめ

今回はsocket.ioにおける接続方式の制限と、クライアント情報を取得する方法について紹介しました。
なお、socket.ioでは接続方式以外にもいろいろな項目を設定することができるので、確認してみてください。

参考サイトなど