【问题标题】:Socket.io emitting to socket.id when stored in variable not working当存储在变量中时,Socket.io 发射到 socket.id 不起作用
【发布时间】: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

【问题讨论】:

    标签: javascript jquery node.js 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 这里你可以看到一个例子。
    猜你喜欢
    • 1970-01-01
    • 2017-05-20
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多