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

时间:2016-08-14 20:55:32

标签: socket.io socket.io-1.0

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

请参阅默认房间文档 http://socket.io/docs/rooms-and-namespaces/#default-room

使用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);
});

1 个答案:

答案 0 :(得分:2)

这是正确的解决方案。发现服务器用来设置默认房间的默认房间socket.id与客户端socket.id不同。请指教。

客户端上,如果您评估$(".openButton").click(function() { $("#div1, #div2, #div3").css("width", "500px"); }); ,可以获得类似的内容,socket.id

服务器上,v4eEdSX5RnDSXjzuAAAA如果您评估io.on('connection', function(socket){}),您会得到socket.id。 请注意 /#前置于客户端socket.id。

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

  1. 当调用emit prepend /#v4eEdSX5RnDSXjzuAAAA到套接字ID
  2. 覆盖io“连接”侦听器,将房间设置为套接字ID而不添加/#
  3. 选择的选项二如下:

    /#