Javascript Socket.io向所有用户发射,尽管.to(房间)
我有一个node.js服务器,它使用Socket.io向客户端发送事件。发生连接事件时,将根据连接用户的id将新套接字放置在房间中,该id是使用会话id cookie从Javascript Socket.io向所有用户发射,尽管.to(房间),javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,我有一个node.js服务器,它使用Socket.io向客户端发送事件。发生连接事件时,将根据连接用户的id将新套接字放置在房间中,该id是使用会话id cookie从socket.headers.handshake.cookie获得的。我知道这部分工作正常,因为我可以设置断点并检查io.sockets.adapter.rooms并查看此文件室: 所以,房间里显然只有一个插座。在该断点处暂停时,以下表达式:userID.toString()的计算结果为:“5cd6201acb0d5f23e46
socket.headers.handshake.cookie
获得的。我知道这部分工作正常,因为我可以设置断点并检查io.sockets.adapter.rooms
并查看此文件室:
所以,房间里显然只有一个插座。在该断点处暂停时,以下表达式:userID.toString()
的计算结果为:“5cd6201acb0d5f23e465cb84”
。所以,这个表达式应该可以用于获取包含一个套接字的房间。然后,在断点之后直接执行以下代码:
io.of('/').in(userID.toString()).emit('notification', notifHTML);
因此,我希望通知事件只发送到该房间中由该表达式标识的一个套接字。通知事件由客户端处理,因此:
socket.on('notification', function(notifHTML){
$("#notificationsContainer").prepend(notifHTML);
$(".notifications-count").html('<i class="fas fa-dot-circle"></i>');
document.title = '(⚐) sweet';
});
然后,事件只发送给我想要的客户机,即我展示的房间中的客户机。(如果一个用户从多个浏览器连接到服务器,那么这个文件室可能包含多个客户端,因此我不能将此文件室代码替换为针对单个套接字的代码。)但是,代码不需要如此详细;我仍然想知道为什么。to没有按我期望的方式工作。从阅读文档中可以看出,它应该提供相同的功能,只向指定房间中的套接字发送事件。为了
向特定房间中的所有套接字发送事件,请尝试执行
io.sockets.in('my-room').emit('my-event', someData);
…这将将事件
广播到默认命名空间中该房间中的所有套接字
。您也可以使用('my-namespace')
的和io
来指定名称空间。代码中的io
之后缺少sockets
部分
或者,做
socket.broadcast.to('my-room').emit('my-event', someData);
…将广播该事件
至该房间内所有插座
,但一个正在广播的插座除外
希望这有帮助:)使用.to
而不是.in
io.of('/').to(userID.toString()).emit('notification', notifHTML);
io.of('/').to(userID.toString()).emit('notification', notifHTML);