如何在nodejs中实现通知系统?

我正在做关于新消息的通知。 我想我需要为每个用户打开套接字,服务器会在发送新消息时发送通知。 我想使用socket.io和redis pub / sub。 当用户发送消息时,它将把这个事件发布给redis和nodejs服务器,这个服务器将成为订户,并且会通知客户有关新消息。 但在这种情况下,消息会立即从队列中删除,并且当用户更新接收到的页面时,会通知所有消息都被读取,因为队列是空的,但是实际上不会读取消息。 如何决定这个问题?

我已经为一个多页面的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); } }); 

如果我理解正确,所有的用户保持打开一个networking套接字与socket.io,任何新的消息被立即发送给所有用户,并标记为未读。 问题很简单,如果用户刷新,那么应用程序不知道什么消息标记为读取与未读。

在这种情况下,你的消息可能有一个时间戳,你可以logging每个用户实际读取的最后一条消息的时间戳(例如,从客户端到服务器发送消息读取事件),以便当用户刷新页面时仍然从中重build读取和未读消息列表的信息。