【发布时间】:2020-03-23 20:18:28
【问题描述】:
我使用 aiohttp 创建了一个简单的 websocket 服务器。我的服务器从 redis pub/sub 读取消息并将其发送到客户端。 这是我的 websocket 代码:
import aiohttp
from aiohttp import web
import aioredis
router = web.RouteTableDef()
@router.get("/ws")
async def websocket_handler(request):
ws = web.WebSocketResponse()
await ws.prepare(request)
sub = request.config_dict["REDIS"]
ch, *_ = await sub.subscribe('hi')
async for msg in ch.iter(encoding='utf-8'):
await ws.send_str('{}: {}'.format(ch.name, msg))
async def init_redis(app):
redis_pool = await aioredis.create_redis_pool('redis://localhost')
app["REDIS"] = redis_pool
yield
redis_pool.close()
await redis_pool.wait_closed()
async def init_app():
app = web.Application()
app.add_routes(router)
app.cleanup_ctx.append(init_redis)
return app
web.run_app(init_app())
我的第一个客户端可以连接到服务器并接收消息,但是当我创建另一个客户端来连接到此端点时,它不会收到任何消息! 问题是什么 ?我该如何解决这个问题?
【问题讨论】:
标签: websocket publish-subscribe aiohttp