节点socket.io客户端侦听发送到另一个客户端的事件

我构build了一个简单的节点socket.io服务器和两个简单​​的节点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 

默认情况下, 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 });