0

我正在尝试构建一个简单的聊天客户端,但在让它跨多个客户端工作时遇到了一些问题。我很可能错过了一些非常简单的事情。当我从一个客户端发送内容时,它会登录该客户端,但不会登录任何其他客户端。

服务器

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);
});
4

2 回答 2

3

socket传递给回调函数的变量是连接的客户端上的句柄,因此socket.emit行为正确,即它应该只发送给发起它的客户端。

尝试:

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

发送给原始客户之外的所有人,或

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

发送给包括发起人在内的所有客户。

于 2013-05-17T15:36:37.607 回答
1

您希望在所有套接字上发出,而不仅仅是发送消息的那个。所以你应该使用:

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

这是假设您在将数据发送到服务器之前没有在发送客户端上记录数据。在这种情况下,您将要使用:

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

它将消息发送到发送者之外的所有连接的客户端。

有关 Socket.io 的参考,请参见此处

编辑:特雷弗打败了我。但是,对于一些额外的说明:io.socketsio.of(''). 当您开始在 scoket.io 应用程序中使用命名空间时,知道这一点很方便。

于 2013-05-17T15:39:49.967 回答