Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.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_Node.js_Socket.io - Fatal编程技术网

Javascript 函数不能与Socket.io一起使用

Javascript 函数不能与Socket.io一起使用,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我试图从一个服务器发送一个数组,当有人使用socket io在服务器上连接时,该数组包含用户的所有ID。显然,发射部分似乎工作正常,但接收部分根本没有响应 io.sockets.on('connection', // here's the on connection event function (socket) { i++; ids[i]=socket.id; console.log("We have a new client: " + ids[i]); socket.broa

我试图从一个服务器发送一个数组,当有人使用socket io在服务器上连接时,该数组包含用户的所有ID。显然,发射部分似乎工作正常,但接收部分根本没有响应

io.sockets.on('connection',
// here's the on connection event
function (socket) {
  i++;
  ids[i]=socket.id;
  console.log("We have a new client: " + ids[i]);
  socket.broadcast.emit('setid', ids);
}
/////that is the emitting part
现在这是接收部分:

 socket.on('setid',
   function(ids) {
  console.log(ids);
 }
);

您需要更改socket.broadcast.emit('setid',id)to
socket.broadcast.emit('setid',{idArr:ids})
console.log(id.idArr)

正如有人问的那样

切断

客户

socket.on('setid', function(ids) {
  console.log(ids.idArr);
 }
);

作为旁注,因为这里不完全清楚,使用
socket.broadcast.emit
将向所有客户端发出,发送emit的套接字除外,因此在打开另一个客户端实例之前,它不会发出。

您需要更改
socket.broadcast.emit('setid',id')
to
socket.broadcast.emit('setid',{idArr:ids})
console.log(id.idArr)

正如有人问的那样

切断

客户

socket.on('setid', function(ids) {
  console.log(ids.idArr);
 }
);

作为一个旁注,这里并不完全清楚,使用
socket.broadcast.emit
将向所有客户机发射,但发送发射的套接字除外,因此在打开另一个客户机实例之前,它不会发射。

看下面的示例,它非常简单,只有
socket.io
服务器和
socket.io客户端
客户端(您可能必须先运行
npm安装socket.io客户端
):

khalil-server.js

const io = require('socket.io')(3001);
var ids = [];
io.on('connection', function (socket) {
    'use strict';
    ids.push(socket.id);
    console.log("We have a new client: " + socket.id);
    socket.broadcast.emit('setid', ids);
});
console.log('Server started at port 3001');
khalil-client.js

const socket = require('socket.io-client')('http://localhost:3001');
socket.on('setid', function (ids) {
    console.log(ids);
});

使用
node khalil server
启动服务器,并使用
node khalil client
启动尽可能多的客户端(您必须运行至少两个客户端实例,因为我们使用
socket.broadcast.emit
)。它只是工作。请向我们展示您的更多代码,我们将尝试查找错误。

请看下面的示例,它非常简单,只有
socket.io
服务器和
socket.io客户端
客户端(您可能必须先运行
npm install socket.io客户端
):

khalil-server.js

const io = require('socket.io')(3001);
var ids = [];
io.on('connection', function (socket) {
    'use strict';
    ids.push(socket.id);
    console.log("We have a new client: " + socket.id);
    socket.broadcast.emit('setid', ids);
});
console.log('Server started at port 3001');
khalil-client.js

const socket = require('socket.io-client')('http://localhost:3001');
socket.on('setid', function (ids) {
    console.log(ids);
});

使用
node khalil server
启动服务器,并使用
node khalil client
启动尽可能多的客户端(您必须运行至少两个客户端实例,因为我们使用
socket.broadcast.emit
)。它只是工作。请向我们展示更多您的代码,我们将尝试查找错误。

您的代码正常,请向我们展示客户端的完整代码。你确定客户端没有收到数组吗?我已经更新了我的答案@mk12ok,准备快速创建一个虚拟项目来测试它,尽管我非常确定这应该可以工作。发送数组
id
完全可以。您发送对象
{idArr:ids}
的解决方案也会起作用,但为什么要让事情变得复杂呢?如果您查看socket.io的任何文档,它们总是使用这种格式发送信息,以便更容易区分。虽然你是正确的,但除非你计划发送多个邮件,否则没有显著的好处。我还验证了我的解决方案是否也有效:-)我认为你说Khalil应该打开另一个客户进行测试时可能是对的。我们没有关于这个问题的完整信息。您的代码还可以,请向我们展示客户的完整代码。你确定客户端没有收到数组吗?我已经更新了我的答案@mk12ok,准备快速创建一个虚拟项目来测试它,尽管我非常确定这应该可以工作。发送数组
id
完全可以。您发送对象
{idArr:ids}
的解决方案也会起作用,但为什么要让事情变得复杂呢?如果您查看socket.io的任何文档,它们总是使用这种格式发送信息,以便更容易区分。虽然你是正确的,但除非你计划发送多个邮件,否则没有显著的好处。我还验证了我的解决方案是否也有效:-)我认为你说Khalil应该打开另一个客户进行测试时可能是对的。我们没有关于这个问题的完整信息