Socket.IO 1.0.x:通过 id 获取套接字

Posted

技术标签:

【中文标题】Socket.IO 1.0.x:通过 id 获取套接字【英文标题】:Socket.IO 1.0.x: Get socket by id 【发布时间】:2015-01-19 06:45:52 【问题描述】:

在0.9.x版本中,我们可以这样通过ID获取socket:

io.sockets.socket(socketId)

但在 1.0.x 中我们不能。如何在 1.0.x 中通过 id 查找套接字?

【问题讨论】:

【参考方案1】:

对于 socket.io 1.0 使用:

io.sockets.connected[socketId]

对于 0.9 它是 io.sockets.sockets[socketId] 而不是 io.sockets.socket[socketId]

【讨论】:

对于命名空间连接,我无法通过io.sockets.connected[socketId].emit() 访问它,但它的工作原理与var nsp = io.of('/my-namespace'); 然后nsp.connected[socketId].emit() 类似。谢谢 同意@Luckylooke,我可以像这样把它放到一个单行中:io.of('/namespace').connected[socketId].emit('message-tag', data, callback) 我认为值得一提的是,我还可以传递一个回调函数作为一个桥梁来从以这种方式连接客户端。【参考方案2】:

你也可以这样使用:

io.to(socketid).emit();

【讨论】:

【参考方案3】:

Socket.io 版本 4.0.0

io.sockets.sockets.get(socketId);

【讨论】:

【参考方案4】:

版本 3.0.3

// in "of", you can put '/' or whatever namespace you're using
    
io.of('/').sockets.get(socketId)

基本上,sockets 不再是一个简单的对象。这是一张地图,所以你必须使用.get()

【讨论】:

也适用于 v4.2.0【参考方案5】:

Socket.io 版本 2.0.3+

    let namespace = null;
    let ns = _io.of(namespace || "/");
    let socket = ns.connected[socketId] // assuming you have  id of the socket

【讨论】:

【参考方案6】:

我尝试过的最简单的方法是:

var socket1 = io.of("/").connected[socketId];

那你就可以了

socket1.join("some room");
socket1.leave("some room");
socket1.emit();

或其他你想要的东西。

【讨论】:

以上是关于Socket.IO 1.0.x:通过 id 获取套接字的主要内容,如果未能解决你的问题,请参考以下文章

通过io.sockets.sockets解析时如何获取socket id

socket.io 和按对象 id 过滤 mongodb

socket.io 和按对象 id 过滤 mongodb

如何在客户端中获取 socket.io 客户端的会话 ID

无法从带有 Socket.IO 的 cookie 中获取 Express 会话 ID

如何在socket.io中的断开事件上获取断开连接的客户端的套接字ID