In regelmäßigen HTTP-Anfragen die Verbindungen zwischen Client und Server sind kurzlebig, ein Client eine Verbindung zu dem Server sendet eine Anforderung, empfängt die Antwort und schließt dann die Verbindung. In diesem Modell kann der Server eine große Anzahl von Clients mit einer kleinen Anzahl von Arbeitern bedienen. Das Nebenläufigkeitsmodell in dieser Situation basiert typischerweise auf Threads, Prozessen oder einer Kombination von beidem.
Wenn Sie Websocket verwenden, ist das Problem komplexer, weil eine Websocket-Verbindung für eine lange Zeit geöffnet ist, so dass der Server nicht einen kleinen Pool von Arbeitern verwenden kann, um eine große Anzahl von Clients zu bedienen ein eigener engagierter Arbeiter. Wenn Sie Threads und/oder Prozesse verwenden, wird Ihre App nicht skaliert, um eine große Anzahl von Clients zu unterstützen, da Sie keine große Anzahl von Threads/Prozessen haben können. Diese
ist, wo GEVENT das Bild eintritt. Gevent verfügt über ein Concurrency-Modell, das auf Greenlets basiert und viel besser skaliert als Threads/Prozesse. Durch die Verwendung von Web-Socket-Verbindungen mit einem geventbasierten Server können Sie aufgrund des geringen Gewichts von Greenlets mehr Clients unterstützen. Mit uWSGI haben Sie die Wahl zwischen Concurrency-Modellen, die mit Web-Sockets verwendet werden können. Dazu gehört auch das Greenlet-basierte Modell von gevent. Sie können auch den Web-Server von gevent verwenden, wenn Sie möchten.
Aber das GEVENT beachten Sie nichts über Web-Sockets wissen, ist es nur ein Server. Um Websocket-Verbindungen zu verwenden, müssen Sie eine Implementierung des Websocket-Servers hinzufügen.
Es gibt zwei Erweiterungen für Fläschchen, die die Verwendung von WebSockets vereinfachen. Die Flask-Sockets Erweiterung von Kenneth Reitz ist ein Wrapper für gevent und gevent-websocket. Die Flask-SocketIO Verlängerung (schamlose Werbung, wie ich der Autor bin) ist ein Wrapper für GEVENT und GEVENT-socketio auf dem Server plus Socket.IO auf dem Client. Socket.IO ist ein Socket-Protokoll auf höherer Ebene, das den Web-Socket verwenden kann, sofern verfügbar, aber auch andere Transportmechanismen in älteren Browsern verwenden kann.
Ich hoffe, das hilft!
Es ist eine Erweiterung von Kenneth Reitz dem Namen „Flask-Sockets“ geschrieben, die für WebSockets ausgezeichnet. Hör zu. https://github.com/kennethreitz/flask-sockets – codegeek
Danke, aber ich bin auch daran interessiert, die Rolle von gevent in diesem Durcheinander herauszufinden. – ruipacheco
würde ich sagen, weil es ein asynchrones ist. Da ist also für einen einzelnen Arbeiter nicht nur ein einziger Kunde beschäftigt. –