Javascript Socket.io向所有用户发射,尽管.to(房间)

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

我有一个node.js服务器,它使用Socket.io向客户端发送事件。发生连接事件时,将根据连接用户的id将新套接字放置在房间中,该id是使用会话id cookie从
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);