Ich versuche, Websocket in einer vorhandenen Flasche erholsamen App zu unterstützen, die das Gunicorn Timeout auf 20 Sekunden setzen. Ich entschied mich dafür, eine Flaschensockelverlängerung zu verwenden, und die Dinge laufen gut, außer das Greentlet würde nach 20 Sekunden auslaufen.Worker Timeout bei der Verwendung von Kolben-Sockets
Ich nehme an, dass die Websocket-Verbindung als eine normale HTTP-Anfrage behandelt wird, so dass es erwartet wird, eine Antwort über das Greenlet-Timeout zurückzugeben.
Ich habe den folgenden Code ein und änderte den gunicorn worker_class zu geventwebsocket.gunicorn.workers.GeventWebSocketWorker
sockets = Sockets(app)
@sockets.route('/log')
def test_connect(socket):
while not socket.closed:
import time
time.sleep(2)
socket.send("heart beating")
Wie soll ich mit dieser Situation umgehen? Danke für jeden Hinweis.
Add-Ausgang:
Traceback (most recent call last):
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/pywsgi.py", line 508, in handle_one_response
self.run_application()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/geventwebsocket/handler.py", line 75, in run_application
self.run_websocket()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/geventwebsocket/handler.py", line 52, in run_websocket
list(self.application(self.environ, lambda s, h, e=None: []))
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/zeus_core/wsgi/wsgi.py", line 332, in __call__
return self.app(environ, start_response)
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/flask_sockets.py", line 45, in __call__
handler(environment, **values)
File "./modulepub/app.py", line 49, in test_connect
time.sleep(2)
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 75, in sleep
hub.wait(loop.timer(seconds, ref=ref))
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 341, in wait
result = waiter.get()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 568, in get
return self.hub.switch()
File "/Users/bayi/Documents/dev/python/venvs/modulepub/lib/python2.7/site-packages/gevent/hub.py", line 331, in switch
return greenlet.switch(self)
Timeout: 20 seconds
Bitte fügen Sie Ihre Terminal-Ausgabe (StackTrace) – Nabin
@Nabin Traceback hinzu – bayi