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

时间:2012-07-18 23:01:26

标签: node.js redis websocket socket.io

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

2 个答案:

答案 0 :(得分:1)

我已经为多页网络应用做了类似的事情,但现在它是单页的,我不再需要它了:

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

答案 1 :(得分:0)

如果我理解正确,所有用户都使用socket.io打开Web套接字,任何新邮件都会立即发送给所有用户并标记为未读。问题很简单,如果用户刷新,则应用程序不知道要标记为已读和未读的消息。

在这种情况下,您的消息可能有一个时间戳,您可以记录每个用户实际读取的最后一条消息的时间戳(例如,从客户端向服务器发出消息读取事件),以便在用户刷新页面时仍有信息可用于重建已读和未读消息的列表。