express+node.jsのSocket.ioを使ってチャネル対応チャットを作成

express on node.js

Express+node.js+socket.ioでシンプルなチャットサイトを作ることはすぐできたけど、
複数チャットを利用する時に必要なチャネル分けみたいに機能がないみたい。
ググってみたけどあまりこれだというのが引っかからなかったのでクラスを少しいじって対応してみた。

【 やりたい事 】
– クライアントをチャネルに入室~
– チャネルら入室しているメンバーにのみメッセージ送信

/***********************************************************
 * Chart
 ***********************************************************/
var ejs = require('ejs');
var io  = require('socket.io');
var port = 3000

var socket = io.listen(app);
socket.on('connection', function(client) {
    client.joinChannel("hoge channel");
    client.on('message', function(msg) {
        client.send(msg);
        client.broadcastToChannel(msg, "hoge channel");
    });
    client.on('disconnect', function() {
        console.log('disconnect');
    });
});

/***********************************************************
 * Socket.io/Client メソッド追加
 ***********************************************************/
var Client  = require('socket.io/lib/socket.io/client.js');
// 指定したチャネルのクライアントにのみメッセージを送信する
Client.prototype.broadcastToChannel = function(message, channel){
  for (var i = 0, k = Object.keys(this.listener.clients), l = k.length; i < l; i++){
    if(this.listener.clients[k[i]].channel == channel) {
      this.listener.clients[k[i]].send(message);
    }
  }
  return this;
};
// クライアントがチャンネルに入るためのメソッド
Client.prototype.joinChannel = function(channel){
  this.channel = channel;
};

一応、これでチャネル分けとメッセージ送信できた。(Clientクラスのrequireがちょっと気持ち悪いけど・・)
上のコードだと「hoge channel」限定なのでチャネル作成・管理なども実装していく必要あり。
今後のtodoってことで・・。

関連ページ