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
7
A
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
- 1. scalabilità websocket
- 2. Scalabilità di Websocket, problemi di trasmissione
- 3. Hosting di un'applicazione tornado/websocket
- 4. Tornado WebSocket con Django ORM con sessione condivisa
- 5. Websocket Tornado che supportano il binario
- 6. Ottenere Websocket sicuri che funzionano su Tornado
- 7. signalR vs HTML5 WebSocket per un'applicazione di chat asp.net MVC
- 8. Python Tornado Websocket Connessioni ancora aperte dopo la chiusura
- 9. Tornado WebSocket si chiude una volta al minuto
- 10. Costo di websocket sicuro rispetto a websocket non protetto
- 11. Come ridurre la scalabilità della mappa AppEngine?
- 12. Scalabilità scalabilità di app Silverlight WP7
- 13. Come verificare la scalabilità della mia applicazione
- 14. Scalabilità IIS
- 15. WebSocket: errore durante l'handshake WebSocket: l'intestazione 'Sec-WebSocket-Protocol' non vuota non è stata ricevuta
- 16. Schermata della chat di Skype dall'intenzione
- 17. pitone tornado inviare un messaggio a tutti i collegamenti
- 18. Ottieni output da un processo di sottoprocesso python a tornado
- 19. Scalabilità di DotNetNuke
- 20. Notifica live/chat in django
- 21. Problemi di applicazione della chat con palloncino
- 22. Problema del widget della chat comprimibile Bootstrap
- 23. applicazione chat: pububhubbub vs xmpp
- 24. Chiamata asincrona Tornado a una funzione
- 25. Avvio a molla + Websocket (SockJS)
- 26. Websockets Notification-/Chat- System
- 27. Come posso rilevare un'interruzione della connessione WebSocket?
- 28. Come inviare messaggi a determinati utenti Ratchet PHP Websocket
- 29. Coroutine tornado
- 30. Server Websocket dietro a IIS 7 Reverse Proxy
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
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
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 '. –