【问题标题】:if statement is blocking the socket from emiting messages to clientif 语句阻止套接字向客户端发送消息
【发布时间】:2018-05-02 23:25:50
【问题描述】:

我的代码遇到了一些非常奇怪的问题。我有一个使用套接字更新聊天室的功能。在我得到房间里的客户数量之前,一切都很顺利。

function updateChatRoom(user, gender, vip, firstname, message, latitude, longitude, room, updateUser)
    {
        const messageDetails =
        {
            gender: gender,
            vip: vip,
            firstname: firstname,
            content: message
        }

        /*********** IF I DELETE THIS IF STATMENT, IT SENDS TO THE USER ********/
        if (user.in('/').adapter.rooms[room].length)
        {
            messageDetails.roomLength = user.in('/').adapter.rooms[room].length;
        }
        /*********** IF I DELETE THIS IF STATMENT, IT SENDS TO THE USER ********/

        if (latitude && longitude && typeof latitude == 'number' && typeof longitude == 'number')
        {
            messageDetails.latitude = latitude;
            messageDetails.longitude = longitude;
        }

        if (updateUser)
        {
            console.log("sending to user"); //Always runs, regardless if the if statment is there or not
            user.emit('incomingChatMessage', messageDetails); //I only receive this if i delete that if statment
        }
        user.in(room).broadcast.emit('incomingChatMessage', messageDetails); //Always runs
    }

所以如果你能看到中间的 if 语句。这得到了这个房间里的人数。通过测试和调试,我可以看到它是正确的。但是,当它在那里时,user.emit 不会运行,或者即使运行了,它也不会向用户发送任何内容。

我知道 updateUser 也是如此,因为它总是将“发送给用户”记录到控制台。

如果我只是删除 if 语句,它会正常发送。我唯一的猜测是,当我检查房间长度时,我正在更改用户的属性,所以它不会再发送给他们了?我完全不知道。

此外,发出房间中除客户端之外的每个人的消息的最后一行,无论是否使用 if 语句都有效。

【问题讨论】:

    标签: javascript node.js websocket socket.io


    【解决方案1】:

    将您的if 代码放入try...catch 块中,并将异常打印到控制台日志中。我认为在你的代码中的某个地方你有 try...catch 块,其中 catch 是空的并且什么都不做。

    【讨论】:

    • 我做了,没有错误。它还每次都能正确打印出结果。
    • 发出前控制台日志messageDetails
    • messageDetails 正常记录,只是一个对象。你的第二条评论就是我的想法
    • 我试着去掉 if 语句,只放 'let x = user.in('/');'这导致了同样的结果。也许它开辟了一个新的连接或什么
    • 然后尽量避免使用这个并找到另一种方法来获得房间长度。
    猜你喜欢
    • 2018-05-16
    • 1970-01-01
    • 2017-08-14
    • 2021-12-23
    • 2017-07-01
    • 2018-09-08
    • 1970-01-01
    • 2019-08-25
    • 2013-04-01
    相关资源
    最近更新 更多