2017-08-04 1 views
1

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 
+0

Bitte fügen Sie Ihre Terminal-Ausgabe (StackTrace) – Nabin

+0

@Nabin Traceback hinzu – bayi

Antwort

0

gefunden, dass das Timeout durch den Rahmen festgelegt wir verwenden. Es fügt der flask-App eine Middleware hinzu, um den Timeout für jeden API-Aufruf festzulegen. Durch Ändern der Timeout-Konfiguration kann dies behoben werden.

Verwandte Themen