1
두 소스에서 이벤트를 받아야하는 응용 프로그램을 작성하고 있습니다. 일부 이벤트는 Websocket 클라이언트 연결에서 제공되며 일부 이벤트는 들어오는 HTTP 요청에서 가져옵니다. aiohttp를 사용하여 두 응용 프로그램 모두에서 동일한 리스너를 사용할 수 있습니까? 아니면 두 개의 별도 실행 파일이 필요합니까?aiohttp Websocket 클라이언트 및 HTTP 서버
I 현재 각 이벤트에 콜백을 웹 소켓 이벤트를 받아, 호출하는 기능을 가지고
async def callback(msg):
print(msg)
async def websocket():
session = aiohttp.ClientSession()
async with session.ws_connect('http://example.org/websocket') as ws:
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
await callback(msg.data)
elif msg.type == aiohttp.WSMsgType.CLOSED:
break
elif msg.type == aiohttp.WSMsgType.ERROR:
break
문제는 영원히이 블록, 그래서 내가 aiohttp 이것을 통합 할 수 방법을 모른다 섬기는 사람. 내가하는 경우 :
await websocket()
aiohttp.web.run_app(app)
web.run_app
는 결코 호출되지 않습니다. 이것을 달성 할 수있는 방법이 있습니까? 그것은 비동기 적으로 여러 이벤트를 처리하는 여러 가지 asyncio에 대한 이상적인 경우 인 것처럼 보입니다. 어떻게해야합니까?
정식 솔루션 –