我正在尝试创建一个聊天系统,其中一次只有两个用户能够互相交谈(非常类似于facebook的聊天)
我尝试使用mongoDB的_id作为名称进行多路复用,因此每个通道都是唯一的。
我面临的问题是我无法将消息定向到单个客户端连接。
这是首先发送消息的客户端代码
$scope.sendMessage = function() {
specificChannel.send(message)
$scope.messageText = '';
};
这是服务器端接收消息
specificChannel.on('connection', function (conn) {
conn.on('data', function(message){
conn.write('message')
}
}
当我向任何频道发送消息时,每个频道仍会收到该消息。
如何使每个客户端仅侦听发送到特定频道的消息?
看来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,但这也取决于您的平台)
希望能帮助到你!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句