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