Node.js 在套接字id快速更改时,使用soocket.io向特定客户端发送消息

Node.js 在套接字id快速更改时,使用soocket.io向特定客户端发送消息,node.js,socket.io,Node.js,Socket.io,我正在使用node.js和socket运行聊天服务器,希望向特定客户端发送消息。我使用socket.id将消息发送给定义的用户,如下所示: io.sockets.in(user socket.id).emit('message',message) 但有一个问题: 用户保持连接,但套接字id变化很快(大约每秒一次),因此我无法使用socket.id.i尝试使用socket.join(用户电子邮件)来使用用户电子邮件而不是套接字id,但在套接字id变化后,它不再起作用。 解决此问题的最佳方法是什么

我正在使用node.js和socket运行聊天服务器,希望向特定客户端发送消息。我使用socket.id将消息发送给定义的用户,如下所示:

io.sockets.in(user socket.id).emit('message',message)
但有一个问题: 用户保持连接,但套接字id变化很快(大约每秒一次),因此我无法使用socket.id.i尝试使用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 ") });

将我的评论变成回答,因为这确实是一个问题:


要解决的问题是快速断开/重新连接客户端。这是一个明显的迹象,表明配置中的某些内容不正确

可能是网络基础设施未正确配置以允许长时间的socket.io/webSocket连接。或者,如果您的系统是集群式的,则可能是非粘性负载平衡造成的


因此,每次网络基础设施关闭连接时,客户端socket.io库都会尝试重新连接,为新连接创建一个新ID。

这根本不对,您需要提供更多详细信息,说明为什么套接字以如此高的速率断开/重新连接。@实际上,我不知道为什么会发生这种情况。因为我在本地主机上没有此问题。要解决的问题是快速断开/重新连接客户端。这是一个明显的迹象,表明配置中的某些内容不正确。可能是网络基础设施未正确配置以允许长时间的socket.io连接。或者,如果您的系统是群集的,则可能是非粘性负载平衡造成的。@jfriend00是。这就是问题所在。非常感谢。