我正在尝试建立一个聊天系统,一次只有两个用户可以互相交谈(就像Facebook的聊天一样)
我尝试过多路复用,使用mongoDB的_id作为名称,因此每个频道都是唯一的。
我面临的问题是我无法将消息定向到单个客户端连接。
这是首先发送消息的客户端代码
$scope.sendMessage = function() {
specificChannel.send(message)
$scope.messageText = '';
};
这是接收消息的服务器端
specificChannel.on('connection', function (conn) {
conn.on('data', function(message){
conn.write('message')
}
}
当我向任何频道发送消息时,每个频道仍会收到该消息。
如何才能使每个客户端只收听发送到特定频道的消息?
答案 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,但这也取决于您的平台)
希望它有所帮助!