socket.io - 无法从服务器向特定客户端

时间:2018-05-27 11:28:01

标签: javascript node.js socket.io

所以我在连接时尝试从服务器向一个特定客户端发送数据(这是服务器代码):

io.sockets.on('connection', function(socket){
   socket.id = Math.random();

   //this works, but sends data to all clients, which is not what I need
   socket.emit('serverMsg');

   //this seems to do nothing
   io.to(socket.id).emit('serverMsg');

   //this also does nothing
   socket.broadcast.to(socket.id).emit('serverMsg');
});

正如我对这些行进行了评论,我可以向所有客户端发送数据,但是当我尝试使用socket.id向特定客户端发送数据时没有任何反应。 我究竟做错了什么?没有错误消息或任何内容。

2 个答案:

答案 0 :(得分:1)

当客户端连接时,其socket.id会自动初始化。此外,它还使用相同的名称加入room

  

Socket.IO中的每个Socket都是由一个随机的,不可思议的,   唯一标识符Socket#id。为了您的方便,每个插座   自动加入由此ID标识的房间。

如果由于某种原因,您希望重新定义id,则还需要将套接字分配给相应的房间,因为to( )方法期望将其作为其参数的房间名称。在帖子中的代码中,您重新定义id,但未建立与相应房间的关联,因此emit方法将数据发送到“void”(进入房间的名称为它等于Math.random()的结果,但不包含套接字)...

const customId = ....
socket.id = customId;

socket.join(customId);

io.to(customId).emit(...)

答案 1 :(得分:0)

这对我有用

const http = require('http').createServer();
const sio = require('socket.io')(http);

var port = xxxx;
var ip = "xxx.xxx.x.x";

sio.on('connection', async function(socket) {
     sio.sockets.to(socket.id).emit("from_server", "your are connected"); 
});



http.listen(port, ip, function() {
    console.log('Server active. listening on :' + ip + ":" + port);
});