0

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

客户 :

(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);
  }); 
});

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

4

3 回答 3

3

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

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

发射到当前套接字:

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

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

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

来源

于 2013-02-13T08:36:13.383 回答
2

当您使用套接字时,您正在直接与连接的客户端交谈。

但是,您可以使用房间,在此代码段中,我将套接字添加到 room1

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

然后你可以通过

io.sockets.in('room1').emit('startGame', true);
于 2013-02-13T08:30:55.760 回答
0

代码按预期工作。你正在做socket.emit("new move",data);,这将发出一个new move事件回那个特定socket的,在你的情况下,它是连接的同一个套接字。

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

socket.emit("new move",data);
socket.broadcast.emit("new move",data);
于 2013-02-13T08:31:11.187 回答