0

如何通过 uWSGI 通过 Apache 使用 gevent-socketio 的 SocketIOServer 为我的 Django 应用程序提供服务?

我有以下 uWSGI .ini 文件:

[uwsgi]
socket = 127.0.0.1:3031
master = true
processes = 2
env = DJANGO_SETTINGS_MODULE=demo.settings
module = app:serve

然后我有以下内容app.py

from gevent import monkey
from socketio.server import SocketIOServer
import django.core.handlers.wsgi
import os
import sys

monkey.patch_all()

PORT = 3031

os.environ['DJANGO_SETTINGS_MODULE'] = 'demo.settings'

def serve():
    application = django.core.handlers.wsgi.WSGIHandler()
    SocketIOServer(('', PORT), application, namespace="socket.io").serve_forever()

但它只是继续加载,基本上我的问题是我如何告诉 uWSGI 在服务时使用 SocketIOServer?

4

1 回答 1

2

目前尚不清楚您是否希望 uWSGI 为两者提供服务,或者您希望使用 socketio 服务器的附加进程。

通常,您不能在同一进程中将阻塞应用程序(如 django)与非阻塞应用程序(如基于 gevent)混合,即使您使用猴子补丁,您的数据库适配器也不会被猴子补丁(除非您使用本机 python 适配器,这在 django 中并不常见)。

所以我想你想将 SocketIOServer 作为一个不同的进程产生。只需将最后两行移出 serve() 以便 uwsgi 导入器将解析/运行两者

于 2012-08-14T06:34:14.103 回答