gpt4 book ai didi

python - WebSockets 和 WSGI 通过 Gunicorn 结合在一起

转载 作者:太空狗 更新时间:2023-10-29 20:30:43 25 4
gpt4 key购买 nike

是否可以使用 Gunicorn 在一个(Flask)应用程序中同时处理 WebSocket 和常规 WSGI View ?

我知道如何使用 Gevent WSGI 服务器让 websockets 工作,我可以得到一个常规的 WSGI 应用程序与 Gunicorn 和 gevent workers 一起运行,但是当我尝试使用 Gunicorn 从一个应用程序同时为这两个服务时,我得到一个错误:

ValueError: View function did not return a response

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

编辑:

我想出了如何让这个工作。关键是 1) 更改 gevent 的日志记录功能和 2) 确保向 gunicorn 指定我正在使用 geventWebSocketWorker 类 worker 。

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

郑重声明,我认为让一台服务器运行 tornado/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

最佳答案

Flask-Sockets可能会有帮助。

关于python - WebSockets 和 WSGI 通过 Gunicorn 结合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17635155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com