W zwykłych żądaniach HTTP połączenia między klientem a serwerem są krótkotrwałe, klient łączy się z serwerem, wysyła żądanie, odbiera odpowiedź, a następnie zamyka połączenie. W tym modelu serwer może obsługiwać dużą liczbę klientów korzystających z niewielkiej liczby pracowników. Model współbieżności w tej sytuacji jest zwykle oparty na wątkach, procesach lub ich kombinacji.
Gdy używasz websocket problem jest bardziej złożony, ponieważ połączenie z internetem jest otwarte przez długi czas, więc serwer nie może korzystać z małej puli pracowników do obsługi dużej liczby klientów, każdy klient musi uzyskać własnego oddanego pracownika. Jeśli używasz wątków i/lub procesów, aplikacja nie będzie skalowana, aby obsługiwać dużą liczbę klientów, ponieważ nie możesz mieć dużej liczby wątków/procesów.
To jest, gdzie gevent wchodzi w obraz. Gevent ma model współbieżności oparty na greenletach, który skaluje się znacznie lepiej niż wątki/procesy. Tak więc obsługa połączeń websocket z serwerem bazującym na geenie pozwala na obsługę większej liczby klientów, ze względu na małą wagę greenletów. Za pomocą interfejsu uWSGI można wybierać modele współbieżności do korzystania z gniazd internetowych, w tym model oparty na zieleni z geventu. Jeśli chcesz, możesz również użyć autonomicznego serwera sieciowego Gevent.
Należy jednak pamiętać, że gevent nie wie nic o gniazdach internetowych, jest tylko serwerem. Aby korzystać z połączeń websocket, musisz dodać implementację serwera websocket.
Istnieją dwa rozszerzenia do kolby, które upraszczają korzystanie z gniazd internetowych. Rozszerzenie Flask-Sockets autorstwa Kennetha Reitza to opakowanie 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 kliencie. Socket.IO to protokół gniazda wyższego poziomu, który może korzystać z gniazda internetowego, jeśli jest dostępny, ale może również korzystać z innych mechanizmów transportu w starszych przeglądarkach.
Mam nadzieję, że to pomoże!
Istnieje rozszerzenie napisane przez Kennetha Reitza o nazwie "Gniazda na flask", które jest doskonałe dla gniazd internetowych. Sprawdź to. https://github.com/kennethreitz/flask-sockets – codegeek
Dzięki, ale jestem również zainteresowany odkryciem roli geventu w tym bałaganie. – ruipacheco
Powiedziałbym, ponieważ jest to asynchroniczne. Tak więc pojedynczy pracownik nie zajmuje się wyłącznie jednym klientem. –