【问题标题】:Socket.io. Is it possible sending to individual socketid (private message) by socket id without specifying namespace?套接字.io。是否可以在不指定命名空间的情况下通过套接字 id 发送到单个套接字 ID(私人消息)?
【发布时间】:2017-12-03 03:09:53
【问题描述】:

我可以在不指定命名空间的情况下通过套接字 ID 发送到单个套接字 ID(私人消息)吗?

示例:socket.to(socketId).emit('message')。它对我不起作用。

它仅适用于命名空间。 namespaceIo.to(socketId).emit('message')

是否可以在不指定命名空间的情况下通过套接字 id 发送到单个套接字 ID(私人消息)?因为所有相同的套接字 id 对于服务器都是全局的。

【问题讨论】:

  • 不清楚您所说的“直接消息”是什么意思。这不是标准的 socket.io 术语。
  • @jfriend00 我的意思是 - 发送到个人 socketid(私人消息)

标签: socket.io


【解决方案1】:

当您只有一个套接字的 ID 值时,要在服务器上将消息直接发送到单个套接字,您可以这样做:

io.to(socketId).emit('message');

在这种情况下,io 就像顶级命名空间一样工作。

【讨论】:

  • 是的,我知道。但我有多个命名空间。我想发送到单个socketid(私人消息)而不指定命名空间。可能吗?您的示例仅适用于默认 ('/') 命名空间。
  • @YuryGolikov - 你让我很困惑。目标套接字是否在特定的命名空间中?我认为 socket.io 不会保留所有套接字的全局列表,而不管命名空间如何。他们将套接字列表保存在特定的命名空间中。这是命名空间的全部点(维护单独的套接字列表)。
  • 是的。我有多个命名空间。在其中之一 - 插座。示例:/ns1 和 /ns2。我有套接字 ID。但是一个不知道这个套接字的命名空间。我可以只知道套接字 id 发送到单个套接字 id(私人消息)吗?
  • 但是为什么他们用全局名称创建套接字 id?喜欢 /ns1#iQYAFwMHhxjDL-4dAAAC 吗?为了什么?
  • @YuryGolikov - 听起来你应该只使用一个命名空间,然后使用房间对套接字进行分组。然后,您可以更轻松地发送到任何套接字或一组套接字。命名空间比你试图做的更分离。
【解决方案2】:

如果您要发送到同一命名空间中的另一个套接字,则不需要指定命名空间,这应该是这种情况。如果没有,那么您应该考虑改用房间。这是一个基本示例:

# server side
var nsp = io.of('/foo');

nsp.on('connection', function (socket) {

  // Broadcast new connection to everyone except the sender in namespace foo
  socket.broadcast.emit('new-socket-connection', socket.id);

  socket.on('response', function(data) {
    socket.to(data.responseId).emit('message', data.msg);
  });

});

responseId'new-socket-connection' 中发送的 id 相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多