通过uWSGI + apache为SocketIOServer提供Django服务

时间:2012-08-14 06:05:56

标签: python django uwsgi gevent

如何通过uWSGI使用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?

1 个答案:

答案 0 :(得分:2)

目前尚不清楚您是否希望uWSGI同时提供服务,或者您希望使用socketio服务器进行额外的处理。

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

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