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() から最後の 2 行を移動するだけで、uwsgi インポーターが両方を解析/実行します。

于 2012-08-14T06:34:14.103 に答える