当接收器离线时,socket.io 发出不工作

Posted

技术标签:

【中文标题】当接收器离线时,socket.io 发出不工作【英文标题】:socket.io emit not working when the receiver is offline 【发布时间】:2021-11-04 06:57:21 【问题描述】:

我想从用户那里接收值,将其更新到 MongoDb,然后将其转发给具有特定 targetId 的接收器。现在,当两个用户都在线时,它工作正常,但是当接收器离线时,应用程序崩溃并且错误是无法读取未定义的属性发射。请帮我解决这个问题。

socket.on('data',Accmsg => 
    const findRsvpAndUpdate = (result,callback)=>
        var value = summa.findOneAndUpdate(
            $or:[sourceId:Accmsg.sourceId,targetId:Accmsg.targetId,sourceId: Accmsg.targetId,targetId: Accmsg.sourceId],
            receive:Accmsg.receive,give:Accmsg.give,sourceId:Accmsg.sourceId,targetId:Accmsg.targetId,upsert: true,new:true,
            function (error,results)
                if (error) 
                    callback(error);
                 else 
                    callback(null, results);
                
            )
    
        findRsvpAndUpdate(Accmsg, (error, result) => 
            if (error) 
                console.log(error);
             else 
                console.log("The result is " +result);
                try 
                    let targetId = Accmsg.targetId;
                    clients[targetId].emit('clientAccount', Accmsg);// problem causing code line
                catch (e)
                    console.log(e);
                

            
        );
);

【问题讨论】:

在调用.emit() 之前检查clients[targetId] 是否未定义。 因为接收器没有连接所以clients[targetId]不是socket。 【参考方案1】:

我解决了这个问题。我使用try catch 处理此错误,现在它工作正常。

【讨论】:

请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。

以上是关于当接收器离线时,socket.io 发出不工作的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 在 x 秒/第一次尝试获取响应失败后停止重新发出事件

为啥重新连接成功时socket.io客户端会发送离线消息?

socket.io 发出不接收消息的原因?

在 socket.io 中发出不工作

离线时Recyclerview不调用onCreateViewHolder

Socket.io 未能发出函数