我正在尝试构建一个简单的聊天客户端,并且遇到一些问题让它在多个客户端上运行。机会是我错过了一些非常简单的事情。当我从一个客户端发送内容时,它会记录在该客户端中,但不会记录在任何其他客户端中。
服务器:
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);
});
答案 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.sockets
与io.of('')
相同。在scoket.io应用程序中开始使用名称空间时,这很方便。