获取发射套接字的当前套接字 id

Posted

技术标签:

【中文标题】获取发射套接字的当前套接字 id【英文标题】:Get the current socket id of an emitting socket 【发布时间】:2017-04-19 22:12:14 【问题描述】:

我需要知道给定名称空间和房间中给定socket.emit() 和相应socket.on() 的当前套接字ID 和索引,但我找不到如何在套接字中执行此操作的良好参考。 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 和套接字索引。

【问题讨论】:

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

在此代码中的回调中:

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 没有提供任何关于跟踪房间或命名空间中的某些套接字顺序的文档。如果您更详细地解释您尝试使用索引做什么,我们可能会告诉您更多关于哪些现有数据结构可能对您有用,或者建议您如何自己跟踪此订单。

【讨论】:

以上是关于获取发射套接字的当前套接字 id的主要内容,如果未能解决你的问题,请参考以下文章

世博会套接字发射不工作,但正在工作

如何在套接字函数之外使用(socket.io)发射函数-nodejs,express

为啥我的客户端应该只连接到一个子节点集群工作人员时接收来自所有子节点集群工作人员的套接字发射?

使用来自另一个客户端的广播发射从节点服务器发送的数据无法被 c++ 套接字 io 客户端读取

套接字 io 不向房间发送消息

Socket.io 通过 id 获取套接字不起作用