2

新しいメッセージに関する通知を行っています。ユーザーごとにソケットを開く必要があると思います。サーバーは、新しいメッセージが送信されたときに通知を送信します。socket.io と redis pub/sub を使いたいです。ユーザーがメッセージを送信すると、このイベントがサブスクライバーとなる redis および nodejs サーバーに発行され、新しいメッセージについてクライアントに通知されます。ただし、この場合、メッセージはすぐにキューから削除され、ユーザーが受信したページを更新すると、キューが空であるためすべてのメッセージが読み取られたことが通知されますが、実際にはメッセージは読み取られません。この問題をどう判断するか。

4

2 に答える 2

1

複数ページの Web アプリに対して既に次のようなことを行いましたが、現在は単一ページであり、これはもう必要ありません。

var notifications=[]
...
socket.on('notify', function(message)
{
    console.log('new notification received!');
    if(notifications[message.notificationId]!==message.notificationId){
        //notification never received in the current page

        notifications[message.notificationId]=message.notificationId;

        //display the notification code here


        //In a closure instead of 3 params in order to keep compatibility with IE
        setTimeout(function(){Confirm(message.notificationId);}, CONFIRM_INTERVAL);


    }
    else{
        //notification already received
        emitConfirm(message.notificationId);
        //or setTimeout(function(){Confirm(message.notificationId);}, CONFIRM_INTERVAL);
    }
});
于 2012-08-15T19:44:39.383 に答える
0

私の理解が正しければ、すべてのユーザーが socket.io で Web ソケットを開いたままにしておくと、新しいメッセージはすぐにすべてのユーザーに送信され、未読としてマークされます。問題は、ユーザーが更新した場合、どのメッセージを既読と未読としてマークするかをアプリが認識できないことです。

その場合、メッセージにタイムスタンプを付けることができ、各ユーザーが実際に読んだ最後のメッセージのタイムスタンプを記録することができます (たとえば、クライアントからサーバーにメッセージ読み取りイベントを発行します)。既読および未読メッセージのリストを再構築するための情報。

于 2012-07-18T23:06:40.237 に答える