【问题标题】:Unable to send messages to who are not online using node.js on my localhost无法在我的本地主机上使用 node.js 向不在线的人发送消息
【发布时间】:2025-11-28 19:35:01
【问题描述】:

我已经使用 socket.io 启动并运行了节点。我能够向在我的服务器上在线的人(他们的套接字连接打开)发送消息。但是,当我尝试将它发送给多个人时,至少有一个离线它不会通过。如果都在线,它就会通过。

关于如何解决这个问题的任何帮助?

client.on('message_from_client',function(data){
    for(var i=0;i<data.length;i++){
        if(data[i].message_to!=''){
            client.emit("update_message_from_server", data[i]);
            if(data[i].message_to != client.username){
                var message_to = data[i].message_to;
                var array =data[i];
                redisClient.SISMEMBER('online',message_to,function(err,reply){
                    if(reply!=0){
                        redisClient.get(message_to,function(err,reply2){
                            if(reply2!=null){
                                io.sockets.sockets[reply2].emit("update_message_from_server",array );
                            }
                        });
                    }else{
                        console.log("Offline");
                    }
                });
            }
        }else{
                client.emit("update_message_from_server", data[i]);
        }   
    }
});

数据是一个 JSON 对象。如果我有任何 data[i].message_to 处于脱机状态,我只能将其发送给客户端,而不能发送给其他套接字。如果我的所有条目都在线,我可以将其发送到客户端和其他套接字

【问题讨论】:

    标签: javascript node.js callback socket.io


    【解决方案1】:

    我想出了其他方法来做到这一点

    client.on('message_from_client',function(data){
            alldata = data.data;
            console.log(alldata);
            alldata = JSON.parse(alldata);
            alldata.forEach(function(data){
                if(data.message_to!=''){
                    client.emit("update_message_from_server", data);
                    if(data.message_to != client.username){
                        redisClient.SISMEMBER('online',data.message_to,function(err,reply){
                            if(reply!=0){
                                redisClient.get(data.message_to,function(err,reply2){
                                    if(reply2!=null){
                                        io.sockets.sockets[reply2].emit("update_message_from_server",data );
                                    }
                                });
                            }else{
                                console.log("Offline");
                            }
                        });
                    }
                }else{
                        client.emit("update_message_from_server", data);
                }   
            });
        });
    

    【讨论】:

    • 你能解释一下答案吗?
    最近更新 更多