Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js只有一个客户端正在接收消息_Node.js_Websocket - Fatal编程技术网

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

node.js只有一个客户端正在接收消息,node.js,websocket,Node.js,Websocket,据我所知,除非另有说明,否则如果服务器发送消息,所有客户机都应该接收它。但在我的例子中,只有一个客户收到消息 客户: (function () { window.Network = { socket : null, initialize : function(socketURL) { this.socket = io.connect(socketURL); this.socket.on('new move', this.add);

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

客户:

(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;
    }
  };
}());
如果我打开多个客户机并使用“发送”功能,则只有发送它的客户机从服务器接收发射。 知道我做错了什么吗?
谢谢

当您使用socket时,您是在直接与连接的客户端通话

但是,您可以使用rooms,取消此代码段,我将套接字添加到room1

// Add the player socket, to the room.
socket.join('room1');
然后,您可以通过

io.sockets.in('room1').emit('startGame', true);

当您使用套接字时,您直接与连接的客户机对话

但是,您可以使用rooms,取消此代码段,我将套接字添加到room1

// Add the player socket, to the room.
socket.join('room1');
然后,您可以通过

io.sockets.in('room1').emit('startGame', true);

代码按预期的方式工作。您正在执行
socket.emit(“新移动”,数据)
,它将向特定的
套接字
发出一个
新移动
事件,在您的情况下,该套接字与所连接的套接字相同

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

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

代码按预期的方式工作。您正在执行
socket.emit(“新移动”,数据)
,它将向特定的
套接字
发出一个
新移动
事件,在您的情况下,该套接字与所连接的套接字相同

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

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

要在服务器端全局发射,请使用以下命令:

io.sockets.emit('new move', 'data1');
要发射到当前套接字,请执行以下操作:

socket.emit('function', 'data1', 'data2');
要向除客户以外的所有人广播:

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

要在服务器端全局发射,请使用以下命令:

io.sockets.emit('new move', 'data1');
要发射到当前套接字,请执行以下操作:

socket.emit('function', 'data1', 'data2');
要向除客户以外的所有人广播:

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

但在本例中,他们不使用广播,所有客户端都会收到聊天信息。我甚至让它在本地工作,代码看起来和我的一样。但在这个例子中,他们不使用广播,所有的客户端都会收到聊天信息。我甚至让它在本地运行,代码看起来和我的一样。我刚刚读到一篇帖子说,和你测试它一样,将我的代码改为io.sockets.emit(“新用户”,数据);但是,仍然只有发送者从服务器接收到emit(新用户,数据),我刚刚读到一篇帖子,上面说的和你测试它时一样,将我的代码改为io.sockets.emit(新用户,数据);但是,仍然只有发送方接收来自服务器的emit。现在我会让它简单一些,但以后可能会创建房间。谢谢你的信息。+1000我已经找了三天了。为什么在btford/angular socket io或socket.io的文档中没有明确说明?这也是一个问题。现在我会让它简单一些,但以后可能会创建房间。谢谢你的信息。+1000我已经找了三天了。为什么btford/angular socket io或socket.io的文档中没有明确说明?