2015-10-01 36 views
10

Ho letto molto sui websocket e li ho già implementati nel mio sistema. Questa domanda riguarda come usarli correttamente. Voglio implementare una notifica e un sistema di chat nel modo giusto.Websockets Notification-/Chat- System

Per le notifiche, ho il canale "notifiche/canale" e per le chat, ho il canale "chat/canale".

Anche questi due canali non sono "globali"? Diciamo che quando il sito ha 1.000.000 utenti, ciò significherebbe che tutti questi utenti si troverebbero in questi due canali. Quando una notifica viene inviata a un altro utente specifico, ciò significa che il messaggio viene inviato attraverso un canale, a cui sono stati abbonati 1.000.000 utenti.

Uguale ai messaggi di chat. Supponiamo che un utente voglia chattare con un altro utente. Ogni messaggio passerebbe il canale a cui tutti gli utenti si sono abbonati e, alla fine, solo l'utente target avrebbe ricevuto il messaggio a causa di un receiver_id passato.

Come gestire correttamente i canali di notifica e i canali di chat "privati"?

sarebbe più performante e sicuro per creare per ogni utente un "sub canale" (chat di gruppo e le notifiche, per esempio "le notifiche/channel/user1"), o semplicemente lasciare che tutti gli utenti in un unico grande canale?

+0

Nessuna idea? Penso che questo sia qualcosa su cui tutti dovrebbero pensare quando si tratta di websocket, quindi ci deve essere un modo consigliato per farlo. – user3746259

+0

Vorresti davvero che tutti gli utenti di 1 m chiacchierano nello stesso gruppo? Altrimenti, è ovviamente necessario suddividere le cose in sottogruppi. Lo stesso con le notifiche. Oltre alle implicazioni sulla performance, non tutti gli utenti dovrebbero ricevere tutte le notifiche per motivi di privacy. – gzost

+0

Non intendevo chattare o inviare notifiche in un unico grande gruppo: intendevo in un unico canale e indirizzarlo agli utenti specifici. – user3746259

risposta

1

personalmente, il modo in cui avrei affrontare questo è il seguente:

Ogni utente ha 1 collegamento websocket. Questa connessione verrebbe utilizzata per passare tutti i dati. Vorrei usare un formato JSON per passare i dati avanti e indietro. Vorrei usare un campo nella struttura JSON per indicare il tipo di messaggio e altre informazioni come l'ID di una chat room. Quindi, se volevo inviare una notifica, potrebbe essere qualcosa di simile (ad esempio molto semplice):

{ 
    "type":"notification", 
    "message":"New Mail" 
} 

un messaggio di chat sarebbe qualcosa di simile a questo:

{ 
    "type":"chat", 
    "chatID":4756, 
    "message":"Hello, world!" 
} 

lato client logica Javascript determinerebbe il tipo di messaggio e cosa fare con esso. La logica lato server determinerebbe se l'utente è "sottoscritto" alla chat room specificata, quindi saprebbe quali messaggi di chat inviare a quale utente. Questo lo manterrebbe sicuro, quindi non invierai messaggi di chat agli utenti che non sono abbonati a un ID di sala.

Fatemi sapere se avete bisogno di chiarimenti su questo metodo.

+0

Un buon approccio, ma come ho letto sopra, sono arrivato alla conclusione di creare canali per utente per le notifiche e i canali di chat privati ​​in cui gruppi di utenti specifici possono chattare. Questo è, credo, un modello migliore. – user3746259

+0

* questo è diverso dal tuo perché avresti solo un canale per utente e nessun canale di chat separato. I controlli di sicurezza possono anche essere eseguiti sul lato server nel momento in cui l'utente tenta di iscriversi a un canale – user3746259

+0

** e non è possibile utilizzare l'approccio per inviare messaggi direttamente dal client al client semplicemente utilizzando js - ma penso che questo non sia così male perché controlli lato server deve essere fatto sempre in tutti i casi – user3746259