我使用aiohttp lib来处理WebSockets。也可以使用aio_pika订阅兔子的香奈儿。 获得新的用户连接后,我将创建新任务,该任务是: 1.建立新频道 2.订阅新队列。
这是代码: WebSockets处理程序:
async def index(request):
ws_current = web.WebSocketResponse()
ws_ready = ws_current.can_prepare(request)
queue_name = get_unique_queue_name()
request.app['users'][queue_name] = ws_current
await ws_current.prepare(request)
#create new task
task = asyncio.create_task(create_queue(queue_name, request.app))
# other code...
这是create_task函数:
async def create_queue(queue_name, app):
connection = app.rabbit # connection we made in Application.cleanup_ctx()
channel = await connection.channel()
# Declaring queue
queue = await channel.declare_queue(
queue_name,
auto_delete=True
)
async for message in queue:
with message.process():
ws = app['users'][queue_name]
import json
# send to client
await ws.send_json(json.loads(message.body))
# have to close channel
await channel.close()
是否有适当的方法来关闭“ create_queue”任务?惠特当然会关闭渠道。 在“索引”函数中移动clarify_queue,在“ create_queue”中移动listen_queue只是侦听频道,我认为这样做不是一个好主意,因为在这种情况下,丢失了两个任务。