0

私の知る限り、別段の指示がない限り、サーバーがメッセージを送信した場合、すべてのクライアントはそれを受信する必要があります。しかし、私の場合、メッセージを受け取っているクライアントは 1 つだけです。

クライアント :

(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 に答える