2013-05-17 65 views
0

我正在嘗試構建一個簡單的聊天客戶端,並且遇到了一些問題讓它在多個客戶端上工作。有機會我錯過了一些非常簡單的事情。當我從一個客戶端發送一些東西時,它會登錄該客戶端,但不會登錄其他客戶端。socket.io不能在幾個客戶端上工作

服務器

var io = require('socket.io').listen(5000); 

io.sockets.on('connection', function (socket) { 
    socket.on('send', function (data) { 
     socket.emit('receive', data); 
    }); 
}); 

客戶

var socket = io.connect('http://localhost:5000'); 
socket.on('receive', function(data){ 
    console.log("Data received at " + new Date() + ": " + data); 
}); 

回答

3

得到數據傳遞給你的回調函數的socket變量是連接客戶端上的把手,所以socket.emit正確行爲,也就是說它應該只發送給發起它的客戶端。

嘗試:

socket.broadcast.emit('receive', data); 

發送給大家除了原始客戶端,或

io.sockets.emit('receive', data); 

發送給所有客戶,包括鼻祖。

1

您想要在所有套接字上發射,而不僅僅是發送消息的套接字。 所以,你應該使用:

io.sockets.emit('recieve', data); 

這是假設你是不是把它發送到服務器之前登錄發送客戶端上的數據。在這種情況下,你需要使用:

socket.broadcast.emit('recieve', data); 

這將消息發送給所有連接的客戶端除了發件人。

See here for reference on Socket.io

編輯:特雷弗打我給它。但是,對於一些額外的說明:io.socketsio.of('')相同。當您開始在scoket.io應用程序中使用名稱空間時,知道哪些方便。