2

私はsocket.ioでノードを稼働させています。サーバーでオンラインになっている人 (ソケット接続が開いている人) にメッセージを送信できます。しかし、少なくとも1人がオフラインで複数の人に送信しようとすると、送信されません。すべてがオンラインの場合は通過します。

これを修正する方法について何か助けはありますか?

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]);
        }   
    }
});

data は JSON オブジェクトです。オフラインとして data[i].message_to がある場合、これはクライアントにのみ送信できますが、他のソケットには送信できません。すべてのエントリをオンラインにすると、クライアントと他のソケットの両方に送信できます

4

1 に答える 1

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);
            }   
        });
    });
于 2013-08-04T23:40:48.763 に答える