【问题标题】:Socketio sending to individual socketid (private message)Socketio 发送到单个 socketid(私人消息)
【发布时间】:2018-09-10 19:55:28
【问题描述】:

我一直在尝试使用 socketio 实现聊天服务。我需要为选定的套接字 id 设置一条消息。文档说要使用像socket.to(<socketid>).emit('hey', 'I just met you'); 这样的函数 但它似乎没有工作。几个月前,我通过io.sockets.connected[<socketid>].emit('hey', 'I just met you'); 之类的功能实现了此功能,但现在它似乎不再起作用了。顺便说一句,socket.broadcast.emit(); 工作得很好。如何解决这个问题?

【问题讨论】:

    标签: node.js sockets socket.io


    【解决方案1】:

    通过以下代码管理发送私信。

    io.on("connection", function(socket) {
      socket.on("online", data => {
        socket.name = data.username;
        onlineUsers.push(data);
        sockets[data.username] = socket.id;
      });
      socket.on("message", function(data) {
        socket.broadcast.emit("public", data);
      });
    
      socket.on("send_personal_message", function(data) {
        socket.to(sockets[data.user]).emit("personal", data);
      });
    
      socket.on("disconnect", reason => {
        sockets.splice(sockets.findIndex(id => id === socket.id), 1);
      });
    });
    

    【讨论】:

      【解决方案2】:

      您可以使用socket.broadcast.to(<socketid>) 广播到特定的套接字ID。

      这是一个例子:

      socket.join('my-unique-room-name');
      socket.broadcast.to('my-unique-room-name').emit('welcome', 'helloWorld'); //only people in 'my-unique-room-name' will receive this message
      

      希望这会有所帮助!

      【讨论】:

      • 我觉得这个例子有点不清楚,但它是在两个用户之间创建私人消息的好方法。两个用户都加入了一个只允许两个用户的私人房间,而不是向随机的 socketID 发送松散的消息。消息发送到整个房间,但因为房间里只有两个人,所以和私人谈话一样。取决于什么最适合您正在构建的系统。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 2020-12-05
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多