2013-06-03 14 views
7

Nell'esempio della chat websocket tornado, i partecipanti sono memorizzati nel set (link), è conveniente nel caso di un singolo server. Ma se esegui più istanze dell'applicazione e nginx come bilanciamento del carico, come in questo caso, meglio memorizzare i partecipanti?scalabilità della chat websocket a tornado

+0

Direi che non c'è differenza se si eseguono più istanze. Alla fine ogni istanza avrà il proprio set(). Se ti preoccupi del bilanciamento del carico per cambiare utente tra istanze, non penso che funzionerà durante una chat ma potrei sbagliarmi. Non ti serviranno tutte le istanze per utilizzare lo stesso elenco di utenti che potresti considerare un piccolo db o un archivio di valori-chiave. – pypat

+0

A quanto ho capito, ogni istanza manterrà la connessione solo ai propri partecipanti, diverse istanze avranno un elenco diverso di utenti. Ma come verrà notificata l'altra istanza di nuovi messaggi nella chat? he – saniaxxx26

+0

Dato che il 'set' appartiene solo a un'istanza python e non è accessibile ad altre istanze, devi creare, come @pypat menzionato, un comune e valore di valore-chiave FAST a cui è possibile accedere da tutte le istanze (come Memcached , Redis ecc.). Un metodo consiste nell'utilizzare il sistema Redis Pub/Sub per notificare tutte le istanze di informazioni aggiornate. Spero che la mia risposta qui sotto aiuti un po '. –

risposta

4

È possibile utilizzare la funzione pubsub di Redis. (link)

Edit:

Quando i vostri clienti accedono al vostro chatroom, possono subscribe a un canale, diciamo chatroom. Non importa quali istanze di tornado stanno usando. Utilizzando this module è possibile continuare ad ascoltare il canale in modo asincrono.

Se un altro client invia un messaggio alla chatroom (ovvero pubblica un messaggio sul canale chatroom), tutte le istanze di tornado invieranno automaticamente i messaggi a coloro che si sono iscritti al canale. Quindi è possibile inviare il messaggio tramite websocket.

È possibile dare un'occhiata a questo demo per l'esempio.

Problemi correlati