函数不适用于Socket.io

时间:2016-12-10 19:42:44

标签: 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.broadcast.emit('setid', ids);
}
/////that is the emitting part

现在这是接收部分:

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

2 个答案:

答案 0 :(得分:0)

您需要在接收功能上将rand4更改为socket.broadcast.emit('setid', ids);socket.broadcast.emit('setid', {idArr:ids});

有人问,

Sever的

console.log(ids.idArr);

客户端

io.on('connection',
// here's the on connection event
function (socket) {
  let i = 0;
  let ids = [];
  i++;
  ids[i]=socket.id;
  console.log("We have a new client: " + ids[i]);
  socket.broadcast.emit('setid', {
    idArr:ids
  });
}

作为旁注,因为这里没有完全清楚,使用socket.on('setid', function(ids) { console.log(ids.idArr); } ); 将向所有客户端发出除了发送发送的套接字所以直到你打开另一个客户端实例它不会发光。

答案 1 :(得分:0)

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

方-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');

方-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)。它只是有效。请向我们展示更多代码,我们将尝试查找错误。