Websockets in Flask

Obecnie badam obsługę websocket w Pythonie i jestem trochę zdezorientowany z ofertami.

Z jednej strony możliwe jest użycie kolby + gevent . Z drugiej strony, uwsgi ma wsparcie dla gniazd i w końcu istnieje rozszerzenie, które łączy zarówno uwsgi i gevent.

Jaki jest problem z implementacją websockets tylko z jednym z nich? Co wygram mieszając je?

Zmiana pytania

Co dodaje gevent zrobić, że gwintowane uwsgi nie będzie?

Author: ruipacheco, 2014-04-16

1 answers

W zwykłych żądaniach HTTP połączenia między Klientem a serwerem są krótkotrwałe, klient łączy się z serwerem, wysyła żądanie, otrzymuje odpowiedź, a następnie zamyka połączenie. W tym modelu serwer może obsługiwać dużą liczbę klientów przy użyciu niewielkiej liczby pracowników. Model współbieżności w tej sytuacji opiera się zazwyczaj na wątkach, procesach lub kombinacji obu.

Podczas korzystania z websocket problem jest bardziej złożony, ponieważ połączenie websocket jest otwarte przez długi okres czasu, więc serwer nie może używać małej puli pracowników do obsługi dużej liczby klientów, każdy klient musi uzyskać własnego dedykowanego pracownika. Jeśli używasz wątków i / lub procesów, Twoja aplikacja nie będzie skalowana w celu obsługi dużej liczby klientów, ponieważ nie możesz mieć dużej liczby wątków / procesów.

Tutaj gevent wkracza do obrazu. Gevent ma Model współbieżności oparty na greenletach, które skalują się znacznie lepiej niż wątki/procesy. Czyli serwowanie websocket połączenie z serwerem opartym na gevent pozwala obsługiwać więcej klientów, ze względu na lekki charakter greenlets. Dzięki uWSGI masz do wyboru modele współbieżności do użycia z gniazdami sieciowymi, w tym model oparty na greenlet od gevent. Możesz również użyć samodzielnego serwera www gevent, jeśli chcesz.

Ale zauważ, że gevent nie wie nic o gniazdach internetowych, jest tylko serwerem. Aby korzystać z połączeń websocket należy dodać implementację websocket serwer.

Istnieją dwa rozszerzenia dla Flask, które upraszczają korzystanie z websockets. Rozszerzenie Flask-Sockets autorstwa Kennetha Reitza jest opakowaniem dla gevent i gevent-websocket. Rozszerzenie Flask-SocketIO (bezwstydna wtyczka, ponieważ jestem autorem) jest opakowaniem dla gevent i gevent-socketio na serwerze, plus Socket.IO na klienta. Socket.IO jest protokołem wyższego poziomu, który może używać gniazda sieciowego, jeśli jest dostępny, ale może również korzystać z innych mechanizmów transportu na starsze przeglądarki.

Mam nadzieję, że to pomoże!

 73
Author: Miguel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-17 01:40:23