【问题标题】:sending to individual socketid (private message) doesnt work in socketIO发送到单个套接字(私人消息)在套接字 IO 中不起作用
【发布时间】:2017-05-31 01:10:47
【问题描述】:

我正在尝试构建一个小型聊天应用程序,我可以在其中发送私人消息(不向所有人广播)。到一个选定的socketid。我浏览了 SockeIO 的文档,并找到了一个可行的解决方案。该应用程序运行良好,因为我使用广播事件对其进行了测试,所有连接的套接字都收到了发出的消息。如何实现个人消息传递?

这是我尝试过的代码。

socket.to(sockets[data.receiver]).emit('receive',data.message);

我使用 socket.to().emit('hey', 'I just met you'); 在 socketio docs 和 sockets[data.receiver] 中给出的例子给出了要发送消息的人的socket.id。

【问题讨论】:

  • 只需选择要发送数据的客户端的套接字并制作一个普通的socket.emit
  • 更多示例代码也有帮助
  • @SebastiánEspinosa 这就是我尝试过的,但它不起作用,正常的 socket.emit 是什么意思?我没有找到除此之外的任何方法,将数据发送到选定的套接字。
  • 将完整的套接字保存在对象上,稍后尝试从该套接字调用发射

标签: node.js sockets socket.io


【解决方案1】:

考虑以下内容:

class Connection {
        constructor(name, socket) {
                this.name = name;
                this.socket = socket;
        }
}

let connections = [];

socket.on('connection', (socket) => {
        // Get a name for the user/connection
        // ...
        // let name = getUsername(socket);

        connections.push(new Connection(name, socket));
});

let sendToName = (name, message) => {
        for(let i = 0, len = connections.length; i < len; i++) {
                if(connections[i].name === name) {
                        connections[i].socket.emit('message', message);
                        break;
                }
        }
};

当然,您可以使用名称以外的其他名称...但您明白了。

【讨论】:

  • 我尝试过类似的方法,我用用户名保存了 socket.id 并用它来向用户发出,但是 socket.to(socket.id).emit(' chat', 'message'); 功能不工作。我试过你的代码,但它不工作
  • 当您处理与该用户/连接的特定套接字时,您不需要 socket.to ......只有 socket.emit('chat', message)。我发布的代码不是一个完整的示例,只是一些样板文件,以提供更好的方向。
猜你喜欢
  • 1970-01-01
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 1970-01-01
  • 2021-07-09
  • 2015-12-30
相关资源
最近更新 更多