Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在实时聊天中,管理多个客户端之间的消息传递的最佳方法是什么?_Node.js_Websocket_Socket.io_Chat - Fatal编程技术网

Node.js 在实时聊天中,管理多个客户端之间的消息传递的最佳方法是什么?

Node.js 在实时聊天中,管理多个客户端之间的消息传递的最佳方法是什么?,node.js,websocket,socket.io,chat,Node.js,Websocket,Socket.io,Chat,我正在开发一个实时聊天应用程序。我已经建立了一个基本的聊天应用程序。但是,我有点怀疑我的做法是否正确 我正在为此使用NodeJS+SOCKET IO。我所做的一切,无论何时任何客户向任何其他客户发送任何消息。。该消息到达socket服务器&socket服务器只是将该消息广播给所有其他连接的客户端,并提供一些额外的详细信息,例如该消息是为谁发送的。因此,在客户端(浏览器)发生任何正确匹配时,它会显示消息&它正在工作 但我的疑问是,这是正确的方法吗?因为,我将消息广播给所有连接的客户端,而不是特定的

我正在开发一个实时聊天应用程序。我已经建立了一个基本的聊天应用程序。但是,我有点怀疑我的做法是否正确

我正在为此使用NodeJS+SOCKET IO。我所做的一切,无论何时任何客户向任何其他客户发送任何消息。。该消息到达socket服务器&socket服务器只是将该消息广播给所有其他连接的客户端,并提供一些额外的详细信息,例如该消息是为谁发送的。因此,在客户端(浏览器)发生任何正确匹配时,它会显示消息&它正在工作

但我的疑问是,这是正确的方法吗?因为,我将消息广播给所有连接的客户端,而不是特定的客户端。看起来不是安全风险吗

然后,如果我使用收件人的套接字id,而不是将该消息广播给所有客户机&只将该消息发送给他/她。。我应该如何管理这样的情况:一个客户端通过不同的设备连接到服务,如。。笔记本电脑、手机、标签?因此,当他/她收到任何消息时,该消息应在所有连接的设备中可见

需要一些关于最好的方法的建议


感谢和问候

您可以将所有连接存储在阵列中或服务器中的其他位置,然后确定在需要将消息发送到单个客户端时需要向哪个客户端发送消息。

您应该存储用户会话(id、套接字)

服务器端:

 var clientSessions = []

// On connection
sockets.on('connection', function(socket) {
  var user = new Object();
  user.id = socket.handshake.query.userId;
  user.socket = socket;
  clientSessions.push(user);
});
客户端:

 socketio.connect('http://localhost:3000', {query: 'userId=ABCXYZ'});

那么,你也同意。。向所有客户广播消息不是一个好主意。它应该只通过他/她的套接字id发送给特定的用户。对吗?如果您发送的数据应该只有收件人才能看到,那么广播和客户端过滤是个坏主意。好的,如果我使用收件人的套接字id发送消息,那么我应该如何处理客户端从不同设备(如笔记本电脑)连接的情况,桌面、移动设备、选项卡等?您可以使用套接字id、其用户名或用户id存储,并使用需要发送到的用户的用户名/名称发送到任何套接字。您能否告诉我,当任何客户端从不同的设备连接到服务时,应采用何种机制进行处理,如。。标签,手机,笔记本电脑。我认为,为此,我需要为具有不同会话信息的所有用户创建一个数组。所以,当消息到达任何特定用户时,我必须检查分配给该用户的不同会话(由于不同的设备),然后再次将该消息发送给所有这些会话。我说的对吗?对!!!,明白你的意思了。您能告诉我,当任何客户端从不同的设备(如..)连接到服务时,应该采用什么机制来处理吗。。标签,手机,笔记本电脑。我认为,为此,我需要为具有不同会话信息的所有用户创建一个数组。所以,当消息到达任何特定用户时,我必须检查分配给该用户的不同会话(由于不同的设备),然后再次将该消息发送给所有这些会话。我说的对吗?在记录用户需要通过关键信息(id或用户名)识别聊天应用程序后,您应该使用数据库(Redis)存储用户会话信息。谢谢你的信息。