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 socket.io是否应加入文件室或侦听唯一ID以接收来自服务器的消息_Node.js_Websocket_Socket.io - Fatal编程技术网

Node.js socket.io是否应加入文件室或侦听唯一ID以接收来自服务器的消息

Node.js socket.io是否应加入文件室或侦听唯一ID以接收来自服务器的消息,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,我正在从事实时聊天项目。多用户可以在聊天室聊天和接收聊天 每个房间都有一个唯一的ID。 当用户加入房间时,我应该使用哪种情况? 案例1: -用户向服务器发送一个带有房间ID的事件“join”,SocketIO server允许用户加入带有ID的房间。然后,当用户聊天时,用户向服务器发送带有聊天数据的事件“chat”,服务器通过io.in(roomID)向该房间中的所有用户发送聊天信息。发送(“chat”,chatData) 案例2: 当用户加入room时,用户可以监听一个名为roomID的事件

我正在从事实时聊天项目。多用户可以在聊天室聊天和接收聊天 每个房间都有一个唯一的ID。 当用户加入房间时,我应该使用哪种情况? 案例1:

-用户向服务器发送一个带有房间ID的事件“join”,SocketIO server允许用户加入带有ID的房间。然后,当用户聊天时,用户向服务器发送带有聊天数据的事件“chat”,服务器通过io.in(roomID)向该房间中的所有用户发送聊天信息。发送(“chat”,chatData)

案例2: 当用户加入room时,用户可以监听一个名为roomID的事件

socket.on(roomID, handleChatDataFunc)
io.emit(roomID, chat Data);
当用户聊天时,它的工作原理与案例1类似,用户向服务器发送一个带有聊天数据的事件“chat”,但现在服务器将广播一个名为roomID的事件

socket.on(roomID, handleChatDataFunc)
io.emit(roomID, chat Data);
因此,所有用户监听一个事件名称roomID都将接收chatData
所有聊天室都是公开的,因此我不需要验证用户身份。创建聊天室的原因是服务器只能向这些用户发送聊天信息。客户机预先向服务器声明他们感兴趣的内容,以便服务器知道发送什么和不发送什么

你的建议是让客户端只监听他们想要的消息名,这意味着你的服务器必须将所有数据发送给所有用户,不管他们是否在监听——不管他们是否想要这些信息。这是低效的(向客户发送他们不想要或不需要的数据),而且对于大量客户来说完全不切实际