2013-07-13 19 views
8

WebSockets ve düzenli WSGI görünümlerini bir (Flask) uygulamasında birlikte kullanmak için Gunicorn kullanmak mümkün mü?WebSockets ve WSGI Gunicorn ile birlikte

Gevent WSGI sunucusunu kullanarak websockets'u nasıl çalıştıracağımı biliyorum ve Gunicorn ile çalışan, düzenli çalışanlarla birlikte düzenli bir WSGI uygulaması elde edebilirim, ancak iki kişiyi Gunicorn kullanarak bir uygulamadan bir araya getirmeye çalıştığımda bir hata:

ValueError: View function did not return a response

o gunicorn kullanarak, bir uygulamadan iki hizmet etmek mümkün mü? En sonunda nginx'in arkasına koymamı planlıyorum ve soketi başka bir uygulamaya bölmek ve iki sisteme sahip olmak zorunda değilim, çünkü bu çok fazla sistem kaynağı gerektirmiyor. O zamana kadar, bunu böyle yapmanın bir yolu var mı?

DÜZENLEME: Bu çalışma almak için anladım

. Anahtar 1) gevent için logging fonksiyonunu değiştirir ve 2) geventWebSocketWorker sınıf çalışanlarını kullandığım gunicorn'u belirttiğinizden emin olun.

Bu sitede bu cevapların bir parçasını bulundu: Kayıt için http://d.hatena.ne.jp/Malan/20121007

, bu benim WSGI şeyler çalışan bir sunucu çalıştıran kasırga/bükümlü/autobahn (teşekkürler Ürdün) ve başka olması muhtemelen daha iyi bir fikir olduğunu düşünüyorum . Ama bu ben burada istediğim bu değil :)

def log_request(self): 
    log = self.server.log 
    if log: 
     if hasattr(log, "info"): 
      log.info(self.format_request() + '\n') 
     else: 
      log.write(self.format_request() + '\n') 

import gevent   
gevent.pywsgi.WSGIHandler.log_request = log_request 
from geventwebsocket.handler import WebSocketHandler 
from gevent.pywsgi import WSGIServer 

sudo gunicorn -c gunicorn_config.py -k  "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" router:app  
+1

Bu, yaptığınız şeyle ilgili mi? http://stackoverflow.com/questions/13137449/combining-websockets-and-wsgi-in-a-python-app – Jordan

+0

Kesinlikle, ancak mümkünse bu projeyle birlikte bükülmüş veya tornado kullanmaktan kaçınmak istiyorum. –

+0

Gunscorn'u uwsgi lehine savurmalısın. – user37203

cevap