Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript socket.io在多个客户端上不工作_Javascript_Socket.io - Fatal编程技术网

Javascript socket.io在多个客户端上不工作

Javascript socket.io在多个客户端上不工作,javascript,socket.io,Javascript,Socket.io,我正在尝试构建一个简单的聊天客户端,但在跨多个客户端工作时遇到了一些问题。很可能我错过了一些非常简单的事情。当我从一个客户端发送内容时,它会登录到该客户端,但不会登录到任何其他客户端 服务器: var io = require('socket.io').listen(5000); io.sockets.on('connection', function (socket) { socket.on('send', function (data) { socket.emit(

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

服务器

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);
});
客户端

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

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

尝试:

发送给除发起客户端以外的所有人,或

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

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

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

尝试:

发送给除发起客户端以外的所有人,或

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

发送到所有客户端,包括发起者。

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

io.sockets.emit('recieve', data);
这是假设在将数据发送到服务器之前,您没有在发送客户机上记录数据。在这种情况下,您需要使用:

socket.broadcast.emit('recieve', data);
将消息发送到除发件人之外的所有连接的客户端


编辑:特雷弗打败了我。然而,对于一些额外的澄清:
io.sockets
io.of(“”)
相同。当您开始在scoket.io应用程序中使用名称空间时,您可以方便地了解这一点。

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

io.sockets.emit('recieve', data);
这是假设在将数据发送到服务器之前,您没有在发送客户机上记录数据。在这种情况下,您需要使用:

socket.broadcast.emit('recieve', data);
将消息发送到除发件人之外的所有连接的客户端

编辑:特雷弗打败了我。然而,对于一些额外的澄清:
io.sockets
io.of(“”)
相同。当您开始在scoket.io应用程序中使用名称空间时,了解这一点非常方便