2

我正在尝试制作一个聊天系统,一次只有两个用户可以互相交谈(很像 facebook 的聊天)

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

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

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

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

这是接收消息的服务器端

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

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

我怎样才能让每个客户端只收听发送到特定频道的消息?

4

1 回答 1

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,但这也取决于您的平台)

希望能帮助到你!

于 2014-07-29T15:25:05.807 回答