私はアプリケーションを実行し、Gunicorn
をnginx
の後ろに置きます。 私のアプリケーションの初期化モジュールでは、web.run_app(app)
を使用してアプリケーションを実行しませんが、Gunicorn
によってインポートされるインスタンスを作成して、各作業者で実行します。Gunicorn
が作成されます。 したがって、Gunicorn
は、いくつかのワーカープロセス、イベントループを作成してから、それらのループ内にアプリケーションの要求ハンドラrunsを作成します。aiohttpアプリケーションプロセスでZeroMQを聞きます
私aiohttp
アプリケーションは、私がGunicorn
によって開始されたアプリケーション・プロセスのいずれかで発生したイベントに通知したい接続WebSockets
(モバイルアプリケーションクライアント)のコレクションを持っています。 そしてすべてWebSockets
に連絡し、すべてのアプリケーションプロセスに接続したいとします。 したがって、私はZeroMQ
を使って何らかのアップストリームプロキシを作成し、各アプリケーションプロセスからzmq.SUB
ソケットを使用して購読したいと考えています。
...だから基本的に私は、各アプリケーションの労働者にこのような何かを達成したい:
context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect('tcp://localhost:5555')
while True:
event = socket.recv()
for ws in app['websockets']:
ws.send_bytes(event)
# break before app shutdown. How?
にはどうすればWebSockets
にメッセージを転送するためにaiohttp
アプリケーション内ZeroMQ
プロキシを聞くことができますか?
イベントループ内でこのコードをバックグラウンドで実行する方法と、アプリケーションのライフサイクルであるaiohttp
内で正しく実行してシャットダウンする方法を教えてください。
UPDATE
私はすでに問題を説明し、可能な解決策を提案aiohttpのGitHubのリポジトリにissueを作成しました。ここに記載された問題については、私は非常に感謝しています。