Mi serve un sistema di notifiche push il quale segnali all'utente con una piccola notifichina su un'icona quando gli è arrivato un nuovo messaggio da un utente, oppure un messaggio di sistema. Se avete pensato a Facebook ed al suo sistema di push di messaggi avete fatto bene, mi serve la stessa identica cosa.
Partiamo dalle soluzioni escluse:
-ho escluso il polling perchè i messaggi sarebbero molto rari, anche se dovessi arrivare a tanti utenti e fare una query ogni, diciamo, 2 minuti quando magari un utente riceve un messaggio a settimana mi sembra un'inutile spreco di risorse.
-ho, per ora, escluso il long-polling perchè, se il sito dovesse avere una grandissima quantità di utenti, tenere aperte tante socket mi sembra troppo dispendioso.
Cosa ho:
-mongo DB per il salvataggio dei messaggi;
-nodeJS e delle funzioni che posso chiamare e si interfacciano a Mongo;
-Apache per far girare il mio framework (proprietario).
La soluzione ottimale sarebbe far sì che siano i browser, magari su porta 80 o anche altra ed insieme all'IP (ovviamente ho l'IP dell'utente) a fare da server. Dunque ad ogni evento (messaggio inviato da un utente ad un altro) dovrei incaricare uno dei miei strumenti (il framework avvisato da NodeJs o direttamente NodeJS) e fare in modo che contattino il suddetto server/browser in ascolto, per dirgli "guarda che all'utente è arrivato un nuovo messaggio, aumenta il valore delle notifiche di 1".
Come mi aspetto che vadano le cose:
-utente A manda un messaggio a B;
-salvo il messaggio su Mongo;
-controllo se l'utente B è connesso;
-se non è connesso metto in una coda e gli recapito i messaggi alla prima connessione (e questo non mi crea problemi);
-se invece è connesso devo contattarlo all'indirizzo IP più porta 80 (o qualcosa del genere) e fargli incrementare le notifiche.
Ovviamente l'unico che mi permettere di fare questo lavoro lato browser è il JS. Ma la domanda è:
c'è un qualcosa Open che mi permette di trasformare un browser in un server in ascolto?
Se no, voi quale soluzione adottereste?