2013-05-05 169 views
2

我構建了一個簡單的Node socket.io服務器和兩個簡單​​的節點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 

回答

3

默認情況下,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 }); 
+0

This Works!謝謝。 – 2013-05-05 12:11:30