无法向目标套接字ID发送私人消息

时间:2019-03-29 03:23:42

标签: node.js socket.io

尽管降低了复杂性和可能导致问题的潜在代码,但我仍然无法让两个用户互相聊天。

我能够向所有连接的插座发出信号,所以我已经确定这不是发出/接通结构的问题,而是;来自我处理专用套接字ID的方式。

我尝试过各种版本的尝试,以将私人消息发送到正确的套接字ID。我尝试了更旧的方法,例如socket.to和文档中的当前方法io.to(sockid).emit('event'message);所有这些变化都无法帮助我。我通过打印console.log('THIS IS MY SOCKET'+ this.socket.id)并通过使用redis-cli将其与Redis中的值进行比较,来解决我在Angular客户端上拥有的套接字ID。每次都完美匹配,这不会给我太多麻烦。

问题出现在这里:

        if (res === 1) {
            _active_users.get_client_key(recipient)
                .then(socket_id => {
                    console.log('======='+io.sockets.name)
                    console.log('I am sending the message to: '+ recipient + 'and my socket id is'+ socket_id)
                //    socket.to(socket_id)socket.emit('incoming', "this is top secret"
                io.of('/chat').to(socket_id).emit('incoming', "this is top secret")

                })
                .catch(error => {
                    console.log("COULD NOT RETRIEVE KEY: " + error)
                })

以下是具有更多上下文的pastebin的链接: https://pastebin.com/fYPJSnWW
我导入的类本质上只是用于处理套接字ID的setter和getter,您可以将它们视为处理Redis操作的辅助类。

预期:允许两个客户端仅根据其套接字ID进行通信。

实际: 能够发出所有连接的套接字并接收预期的结果,但是当尝试从未知原因发送到特定的套接字ID时会出现问题。

1 个答案:

答案 0 :(得分:1)

问题来自我的前端。.我希望没有人会头疼!但是这里发生了什么;当您自己挖洞时,如果您不花时间环顾四周,您通常不会意识到自己有多深。我有两个插座实例。我实例化了两者,并使用一个连接并使用另一个发送消息。如果您希望事情正常进行,那么您当然无法做到。因此,我所做的只是在其中创建了一个套接字实例,然后将套接字的引用传递到我需要它的地方(sendMessage(username,socket)getMessage(socket)

 ngOnInit(     

this.socket = io.connect('localhost:3600',{
      reconnection: true,
      reconnectionDelay: 1000,
      reconnectionDelayMax : 5000,
      reconnectionAttempts: Infinity});