node.js只有一个客户端正在接收消息

时间:2013-02-13 08:24:19

标签: node.js websocket

据我所知,除非另有说明,否则如果服务器发送消息,则所有客户端都应该收到消息。但在我的情况下,只有一个客户端收到消息。

客户:

(function () {
  window.Network = {
    socket : null,  
    initialize : function(socketURL) {
      this.socket = io.connect(socketURL);
      this.socket.on('new move', this.add);     
    },  
   add : function(data) {   
      var msg = $('<div class="msg"></div>')       
      .append('<span class="text">' + data.x+'/'+data.y + '</span>');

      $('#messages')
        .append(msg)
        .animate({scrollTop: $('#messages').prop('scrollHeight')}, 0);
    },   
   send : function(data) {
      this.socket.emit("move",data);
      return false;
    }
  };
}());

服务器:

io.sockets.on('connection', function (socket) {
    socket.on('move', function (data) {
    console.log(data);
    socket.emit("new move",data);
  }); 
});

如果我打开多个客户端并使用“发送”功能,则只有发送它的客户端才会从服务器接收发送。 知道我做错了什么吗? 感谢

3 个答案:

答案 0 :(得分:2)

当您使用套接字时,您正在直接与所连接的客户端通信。

你可以使用房间,但是这个片段我将套接字添加到room1

// Add the player socket, to the room.
socket.join('room1');

然后你可以通过

向房间里的所有客户发光
io.sockets.in('room1').emit('startGame', true);

答案 1 :(得分:2)

要在服务器端全局发射,请使用:

io.sockets.emit('new move', 'data1');

发射到当前套接字:

socket.emit('function', 'data1', 'data2');

向除了客户之外的所有人广播:

socket.broadcast.emit('function', 'data1', 'data2');

Source

答案 2 :(得分:0)

代码正常运行。您正在执行socket.emit("new move",data);,它会将new move事件发回给特定的socket,在您的情况下,该事件与连接的套接字相同。

如果您还希望将其发送到其他已连接的客户端,则需要将事件显式发送给其他客户端。

socket.emit("new move",data);
socket.broadcast.emit("new move",data);