socket.io发射到默认房间不工作

socket.io发射到默认房间不工作,socket.io,socket.io-1.0,Socket.io,Socket.io 1.0,当我在不使用io.emit()的情况下调用emit时,所有连接的客户端都会收到您预期的消息。但是,当尝试使用io.to(socket.id).emit()将消息发送到默认房间时,客户端不会收到消息 请参阅位于的默认房间文档 使用nodejsv4.2.6 客户: var socket = io(); socket.on('connect', function() { $.ajax({ url: '/some-path', type: 'POST', data: {so

当我在不使用io.emit()的情况下调用emit时,所有连接的客户端都会收到您预期的消息。但是,当尝试使用io.to(socket.id).emit()将消息发送到默认房间时,客户端不会收到消息

请参阅位于的默认房间文档

使用nodejs
v4.2.6

客户:

var socket = io();
socket.on('connect', function() {
  $.ajax({
    url: '/some-path',
    type: 'POST',
    data: {socket_id: socket.id},
    success: function(data) {
      console.log(data);
    }
  });
});   
服务器:

app.post('/some-path', function(req, res) {
  var socketID = req.body.socket_id;
  io.to(socketID).emit('message', {'message': socketID});
  res.end(socketID);
});

这是正确的解决方案。发现服务器用于设置默认房间的default room socket.id与client socket.id不同。请告知

客户机上如果对
socket.id
进行评估,您会得到类似于,
v4eedsx5rndsxjzuaaa

服务器上,
io.On('connection',function(socket){})
如果您计算
socket.id
,您将得到类似于,
/#v4eEdSX5RnDSXjzuAAAA
的结果。 请注意,在client socket.id前面加了/#

所以你有两种方法来解决这个问题

  • 调用emit prepend
    /#
    时将其发送到套接字ID
  • 覆盖io“connection”侦听器,将房间设置为套接字ID,而不带
    /
    前缀
  • 选择的选项二如下:

    io.on('connection', function(socket) {
      socketID = socket.client.id;
      socket.join(socketID);
      console.log('a user connected ' + socketID);
    });
    

    请出示相关代码。在socket.io中,如果发送正确,那么发送到房间就可以正常工作。很明显,这必须与您的代码有关。有关代码的问题必须包括相关代码。如果你不包含代码,我们怎么知道你在代码中做错了什么呢?谢谢@jfriend00,我想你的建议会对理解我的发现有很大的帮助。