如何使用sockjs建立私人聊天室?

时间:2014-07-19 02:58:45

标签: node.js websocket socket.io sockjs multiplexing

我正在尝试建立一个聊天系统,一次只有两个用户可以互相交谈(就像Facebook的聊天一样)

我尝试过多路复用,使用mongoDB的_id作为名称,因此每个频道都是唯一的。

我面临的问题是我无法将消息定向到单个客户端连接。

这是首先发送消息的客户端代码

$scope.sendMessage = function() {
  specificChannel.send(message)
  $scope.messageText = '';
};

这是接收消息的服务器端

specificChannel.on('connection', function (conn) {
  conn.on('data', function(message){
    conn.write('message') 
  }
}

当我向任何频道发送消息时,每个频道仍会收到该消息。

如何才能使每个客户端只收听发送到特定频道的消息?

1 个答案:

答案 0 :(得分:2)

似乎SockJS不支持"私人"通道。我使用以下解决方案来解决类似的问题:

var channel_id = 'my-very-private-channel'
var connection = new SockJS('/pubsub', '')

connection.onopen = function(){
    connection.send({'method': 'set-channel', 'data': {'channel': channel_id}})
}

后端解决方案专门针对每个技术堆栈,因此我无法在此提供通用解决方案。总体思路如下:

1)解析" on_message"用于查找所请求的"方法名称"

2)如果方法是" set-channel" - >设置" self.channel"到这个值

3)使用相同的频道向订阅者广播更多消息(我使用Redis,但这也取决于您的平台)

希望它有所帮助!