node.js - 获取发射套接字的当前套接字 ID

标签 node.js express websocket

我需要知道给定 socket.emit() 的当前套接字 ID 和该套接字的索引以及给定命名空间中相应的 socket.on() 和room,但我在 socket.io 文档中找不到如何执行此操作的良好引用。

例如:

客户端

socket.emit('myMessage', myVar);

服务器

socket.on('myMessage', function(myVar){
  //Need the socket id of the client who just emitted
  //and whether or not they are the first socket, second socket, third socket, etc.
  // e.g. something like:

  currentSocketID = io.socket.connected[socketid]; //?? what is the correct syntax?
  currentSocketIndex = io.socket.connected[index[i]]; //?? what is correct syntax?

});

这不是 How can I get the socket ID from an event in Socket.io? 的重复项因为我特别需要评估谁是第一个套接字,第二个套接字等,然后根据该信息执行一些操作。您链接的堆栈只是解释了如何处理新消息,这不是我的问题。我需要处理一条新消息并显示发射器的实际套接字 ID 和套接字索引。

最佳答案

在此代码中的回调中:

socket.on('myMessage', function(myVar){
    // can just use socket.id
});

我认为可能是这样的:

io.on('connection', function(socket) {
    socket.on('myMessage', function(myVar){
        // can just use socket.id
     });
});

您拥有发出消息的客户端的 socket 对象(socket 变量可能仍在范围内),因此您可以直接访问 socket.id 获取该套接字的 id。

您还要求一个索引,但您没有说索引是什么? socket.io 中有各种数据结构来跟踪房间和命名空间中的套接字列表。有些是数组(所以它们有顺序),有些是映射(所以它们实际上没有顺序)。据我所知,socket.io 没有提供任何有关跟踪房间或命名空间中套接字的某些顺序的文档。如果您更详细地解释您要使用索引执行的操作,我们也许能够告诉您更多有关哪些现有数据结构可能适合您的信息,或者建议您如何自己跟踪此顺序。

关于node.js - 获取发射套接字的当前套接字 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43506950/

相关文章:

arrays - 将数组添加到 MongoDB/Mongoose 集合时出错

php - 如何同步 PHP 和 NodeJS 与 Redis 并按顺序获取数据

java - 调用 sendText() 方法时,Tomcat 8.0.33 的 Websocket 实现不会立即抛出 IOException(服务器端)

java - Tyrus WebSockets (Java) - 如何设置客户端本地 ip 地址

javascript - 从 blob 在 nodeJs 中创建图像文件

node.js - 具有多个过滤器的 Elasticsearch 搜索查询

node.js - Mongodb 聚合 $push 与 $cond 和 $each

node.js - 对不同端口中不同应用程序的 http 请求

node.js - 使用 nodejs 和 Express 进行视频流

python - chrome远程调试获取网页资源内容的方法