【发布时间】:2020-03-06 17:23:19
【问题描述】:
我正在使用 node.js 和 socket 运行聊天服务器,并希望将消息发送到特定客户端。我使用 socket.id 将消息发送给定义的用户,如下所示:
io.sockets.in(user socket.id).emit('message',message)
但是有一个问题: 用户保持连接但套接字 id 快速变化(大约每秒一次),所以我不能使用 socket.id。我尝试使用 socket.join(用户电子邮件)使用用户电子邮件而不是套接字 id,但是在套接字 id 更改后它不起作用更多的。 解决此问题的最佳方法是什么?会话 ID?如果是,如何?客户端的聊天应用程序在 android 设备上运行。 这是我的代码:
io.on("connection", function(socket) {
socket.on("login", function(useremail) {
socket.join(useremail);
});
//Here i want to send message to specific user
socket.on('messagedetection', (senderNickname,messageContent,targetuser) => {
//create a message object
let message = {"message":messageContent, "senderNickname":senderNickname}
//targetuser is the email of target user,joined to the socket in login
io.sockets.in(targetuser).emit('message',message)
});
socket.on('disconnect', function() {
console.log( ' user has left ')
socket.broadcast.emit("userdisconnect"," user has left ") });
【问题讨论】:
-
这根本不对,您需要提供更多详细信息,说明为什么套接字会以如此高的速率断开/重新连接。
-
@James 其实我不知道为什么会这样。因为我在本地主机上没有这个问题。
-
要解决的问题是快速断开/重新连接客户端。这清楚地表明配置中的某些内容不正确。可能是网络基础设施未正确配置以允许持久的 socket.io 连接。或者,如果您的系统是集群的,则可能是由非粘性负载平衡引起的。
-
@jfriend00 是的。这就是问题所在。谢谢。