所以我在连接时尝试从服务器向一个特定客户端发送数据(这是服务器代码):
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向特定客户端发送数据时没有任何反应。 我究竟做错了什么?没有错误消息或任何内容。
答案 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);
});