socket.io无法在多个客户端上运行

时间:2013-05-17 15:29:32

标签: javascript 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);
});

2 个答案:

答案 0 :(得分:3)

传递给回调函数的socket变量是连接的客户端上的句柄,因此socket.emit表现正常,即仅发送给发起它的客户。

尝试:

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

发送给所有人,除了原始客户端,或

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

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

答案 1 :(得分:1)

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

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

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

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

将邮件发送给所有已连接的客户发件人。

See here for reference on Socket.io

编辑:特雷弗打败了我。但是,对于其他一些说明:io.socketsio.of('')相同。在scoket.io应用程序中开始使用名称空间时,这很方便。