【问题标题】:Node socket.io client listens to events sent to the other client节点 socket.io 客户端监听发送给其他客户端的事件
【发布时间】:2013-05-05 11:22:08
【问题描述】:

我构建了一个简单的 Node socket.io 服务器和两个简单​​的 Node socket.io 客户端。每个客户端连接到服务器,发送一个请求,等待响应,然后打印它。问题是,每个响应都打印了两次,因为每个客户端不仅得到了自己的响应,还得到了另一个客户端的响应!为什么?

这是服务器代码:

var io = require('socket.io').listen(10001);
io.sockets.on('connection', function (socket) {
  socket.on('echo', function (data) {
    console.log("got request to echo "+data);
    socket.emit("echoes", data+" "+data);
  });
});

这是客户端代码:

var socketioclient = require('socket.io-client');
var socket1 = socketioclient.connect(HOST, {port: PORT}); 
var socket2 = socketioclient.connect(HOST, {port: PORT});

socket1.on('connect', function () { console.log("socket1 connected!"); });
socket2.on('connect', function () { console.log("socket2 connected!"); });

socket1.on('echoes', function (result) { console.log("socket1 received: "+result);  });
socket2.on('echoes', function (result) { console.log("socket2 received: "+result);  });

socket1.emit('echo', "aaa");
socket2.emit('echo', "bbb");

这是客户端输出:

socket1 connected!
socket2 connected!
socket1 received: aaa aaa
socket2 received: aaa aaa
socket1 received: bbb bbb
socket2 received: bbb bbb

这是服务器日志:

   info  - socket.io started
   debug - client authorized
   info  - handshake authorized niJGX0EXWvLPw2THZOeD
   debug - setting request GET /socket.io/1/websocket/niJGX0EXWvLPw2THZOeD
   debug - set heartbeat interval for client niJGX0EXWvLPw2THZOeD
   debug - client authorized for 
   debug - websocket writing 1::
got request to echo aaa
   debug - websocket writing 5:::{"name":"echoes","args":["aaa aaa"]}
got request to echo bbb
   debug - websocket writing 5:::{"name":"echoes","args":["bbb bbb"]}
   debug - emitting heartbeat for client niJGX0EXWvLPw2THZOeD
   debug - websocket writing 2::
   debug - set heartbeat timeout for client niJGX0EXWvLPw2THZOeD
   debug - got heartbeat packet
   debug - cleared heartbeat timeout for client niJGX0EXWvLPw2THZOeD
   debug - set heartbeat interval for client niJGX0EXWvLPw2THZOeD
   debug - emitting heartbeat for client niJGX0EXWvLPw2THZOeD
   debug - websocket writing 2::
   debug - set heartbeat timeout for client niJGX0EXWvLPw2THZOeD

【问题讨论】:

    标签: node.js socket.io node.js-client


    【解决方案1】:

    默认情况下,socket.io 客户端将重用从同一客户端到同一主机/端口 (doc) 的现有连接。您可以使用 force new connection 选项禁用此行为:

    // client.js
    var socket1 = socketioclient.connect(HOST, {port: PORT, 'force new connection': true });
    var socket2 = socketioclient.connect(HOST, {port: PORT, 'force new connection': true });
    

    【讨论】:

      猜你喜欢
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2020-02-17
      相关资源
      最近更新 更多