获取发送套接字的当前套接字ID

时间:2017-04-19 22:12:15

标签: node.js express websocket

我需要知道给定socket.emit()的该套接字的当前套接字ID和索引以及给定命名空间和空间中的相应socket.on(),但我找不到如何做的好参考这在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和套接字索引。

1 个答案:

答案 0 :(得分:2)

在此代码的回调中:

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

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