WebSockets和WSGI通过Gunicorn结合在一起



是否可以使用Gunicorn在一个(Flask)应用程序中一起处理WebSockets和常规WSGI视图?

我知道如何使用Gevent WSGI服务器让websocket工作,我可以让一个普通的WSGI应用程序与Gunicorn一起运行,与Gevent工作人员一起运行,但当我试图使用Guniorn从一个应用程序中同时提供这两者时,我会得到一个错误:

ValueError:View函数未返回响应

有可能使用gunicorn在一个应用程序中提供这两种服务吗?我计划最终把这一切都放在nginx后面,我并不反对将套接字拆分到另一个应用程序中,并让两者进行通信,只要这不需要太多额外的系统资源。在那之前,有办法这样做吗?

编辑:

我想好了如何让它发挥作用。关键是1)更改gevent的日志记录函数,2)确保向gunicorn指定我正在使用geventWebSocketWorker类worker。

我在这个网站上找到了部分答案:http://d.hatena.ne.jp/Malan/20121007

记录在案,我认为让一台服务器运行tortory/twisted/autobahn(感谢Jordan),另一台运行我的WSGI可能是个更好的主意。但这不是我想要的:)

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       

烧瓶插座可能会有所帮助。

相关内容

  • 没有找到相关文章

最新更新