annyoung

Asyncio websocket relay server 본문

프로그래밍

Asyncio websocket relay server

nopsled 2021. 10. 5. 17:26

 

import eventlet
import socketio
import asyncio
from aiohttp import web
from app.constatns import cti_url

# cti_server = socketio.AsyncClient(logger=True, engineio_logger=True)
# sio = socketio.AsyncServer(cors_allowed_origins='*', logger=True, engineio_logger=True)
cti_server = socketio.AsyncClient()
sio = socketio.AsyncServer(cors_allowed_origins="*")
app = web.Application()  # aiohttp web server
sio.attach(app)


@cti_server.on("news")
async def on_news(data):
    # print("client has news", data)
    await sio.emit("news", data)


@sio.on("my other event")
async def on_event(sid, data):
    # print ('server', data)
    await cti_server.emit("my other event", data)


async def main():
    await cti_server.connect(cti_url)
    # await cti_server.wait()


if __name__ == "__main__":
    # asyncio.run(main())
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    # web.run_app(app, port=5000)
    # loop.run_until_complete(asyncio.gather(main()))
    loop.run_until_complete(asyncio.gather(web.run_app(app, port=5000), main()))
    loop.run_forever()

cti_url로 접속하고, 클라이언트에서 받아오는 데이터는 다시 cti_server로 쏜다.

 

cti_server에서 받은 response는 다시 sio.emit을 통해 클라이언트로 보내게 된다.

 

async를 사용하지 않으면 클라에서 서버로 메시지를 보낼수는 있으나, 실질적으로 메시지를 받아오질 못한다.

Comments