当存储在变量中时,Socket.io 发射到 socket.id 不起作用
Posted
技术标签:
【中文标题】当存储在变量中时,Socket.io 发射到 socket.id 不起作用【英文标题】:Socket.io emitting to socket.id when stored in variable not working 【发布时间】:2021-08-14 17:53:56 【问题描述】:如Sending message to a specific ID in Socket.IO 1.0 中给出的,可以通过使用发送到特定的客户端ID
io.to(socketid).emit('message', 'for your eyes only');
在我的 node.js 应用程序中,我正在尝试做同样的事情。基本上,当用户提交另一个 socket.id 时,node.js 后端会将给定的数据发送给该特定套接字 id。虽然前端将请求正确提交给后端,但当我尝试将数据发送到 id 时,它并没有通过。代码的“损坏”部分如下所示:
app.post('/send', function (req, res)
var post_body = req.body;
var id = (JSON.stringify(post_body.id)).split('"')[1].split('"')[0];
var payload = JSON.stringify(post_body.payload);
var user = JSON.stringify(post_body.user);
console.log(id);
console.log(payload);
console.log(user);
io.to(id).emit('testerEvent', description: 'A custom event named testerEvent!');
res.status(200);
);
正在响应发布的数据(数据正确发布)。客户端监听事件“testerEvent”如下:
socket.on('testerEvent', function(data)document.write(data.description));
当仅使用 io.emit 而不是 io.to(id).emit 触发事件 testerEvent 时,它可以正常工作。 我将不胜感激,因为我刚刚开始学习 node 和 socket.io
【问题讨论】:
【参考方案1】:io.to(id)
将向加入房间的客户发送消息,因此如果您尚未将任何客户加入房间,您将不会在客户端上收到消息。当您从 Socket.io 收到客户端套接字时,您可以尝试client.join(id)
来解决该问题。
【讨论】:
谢谢!有没有办法在不使用房间的情况下将它发送到某个 socket.client.id? 我检查了文档,它应该默认加入这个房间。您确定您传递的 ID 正确吗? id是通过myId = socket.io.engine.id从客户端获取的,然后通过post请求传给服务器。在另一个选项卡上,使用 io.to(生成和发送的 id).emit... 从服务器到第一个选项卡不会产生任何结果。 如果要向客户端发送消息,需要使用socket.id
,而这个socket
应该是客户端的socket。
socket.io/docs/v4/server-socket-instance 这里你可以看到一个例子。以上是关于当存储在变量中时,Socket.io 发射到 socket.id 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
nodejs socket.io - 连接到服务器但发射不做任何事情
如何重用 socket.io 发射功能?试图将套接字发射功能附加到 SwiftUI 按钮(操作)?