aiohttpにはwebsocketsのサポートが組み込まれています。とてもシンプルでうまく機能します。
ドキュメントの例の簡略版は次のとおりです。
async def handler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
# Async iterate the messages the client sends
async for message in ws:
ws.send_str('You sent: %s' % (message.data,))
print('websocket connection closed')
この例でws
は、クライアントとの Websocket 接続への参照です。@Crandel がここで行っているrequest.app
ように (つまり、グローバル状態)、この参照を に簡単に入れることができますが、各アプリ サーバー (さらには各ワーカー) が独自のインスタンスを持つため、実稼働アプリではできません。app
これに受け入れられたパターンはありますか?別の方法はありますか?
注: セッションについて言及しているわけではありません。接続について言及しています。サーバー B のアプリケーション コードでイベントが発生したときに、サーバー A に接続しているクライアントにメッセージを送信したいなど。