Как да внедрим система за уведомяване в nodejs?

Правя известия за нови съобщения. Мисля, че имам нужда от отворен сокет за всеки потребител и сървърът ще изпрати известие при ново съобщение. Искам да използвам socket.io и redis pub/sub. Когато потребителят изпраща съобщения, той публикува това събитие на redis и nodejs сървър, който ще бъде абонат и ще уведоми клиента за ново съобщение. Но в този случай съобщението веднага ще бъде премахнато от опашката и когато потребителят актуализира страницата, която получава, ще уведоми, че всички съобщения са прочетени, тъй като опашката е празна, но всъщност съобщенията не се четат. Как да решим този проблем?


person Dmitro    schedule 18.07.2012    source източник


Отговори (2)


Вече направих нещо подобно за многостранично уеб приложение, но сега е едностранично и вече нямам нужда от това:

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);
    }
});
person cricardol    schedule 15.08.2012
comment
emitConfirm изпраща съобщение, което казва, че това е известие за прочетено.... ако отговаря на въпроса ви, можете ли да го приемете? - person cricardol; 20.08.2012

Ако разбирам правилно, всички потребители поддържат уеб сокет отворен с socket.io, всички нови съобщения незабавно се изпращат до всички потребители и се маркират като непрочетени. Проблемът е просто, че ако потребителят опреснява, приложението не знае кои съобщения да маркира като прочетени спрямо непрочетени.

В този случай вашите съобщения могат да имат клеймо за време и можете да запишете клеймото за времето на последното съобщение, което всеки потребител действително е прочел (напр. излъчете събитие за четене на съобщение от клиент към сървър), така че когато потребител опреснява страницата, все още има информация, от която да възстановите списъка с прочетени и непрочетени съобщения.

person webjprgm    schedule 18.07.2012