Невозможно получить сообщение из веб-сокета с помощью aiohttp - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать оболочку api для API веб-сокета. Моя библиотека должна позволять непрерывно прослушивать этот API веб-сокета, не блокируя программу. Я использую asyncio.

Вот как выглядит содержимое моего класса DataStream:

    async def connect(self):
        self.request_id = 0
        asyncio.create_task(self.start_session())
        while not self.enabled:
            await asyncio.sleep(1)

    async def start_session(self):
        async with aiohttp.ClientSession() as session:
            self.web_socket = await session.ws_connect(self.endpoint)
            self.enabled = True
            await self._handle_connection()

    async def _handle_connection(self):
        while True:
            print("looped!")
            msg = await self.web_socket.receive()
            print("test")

Внутри моего класса Client у меня есть:

    async def load_market(self):
        self.market = MarketDataStream(self, f"{self.endpoint}/market", self.user_agent)
        await self.market.connect()

И мой код:

async def main(loop):
    config = Config("config.toml", "config.template.toml")
    client = cryptocom.Client(config.api_key, config.api_secret)
    await client.load_market()
    print("market endpoints loaded!")

Программа печатает "зацикленный!" и "Market endpoints loaded!", что означает, что msg = await self.web_socket.receive() не работает, а мой l oop только l oop один раз. Затем моя программа завершается.

Вот мой полный исходный код: https://github.com/Th0rgal/crypto.com

Спасибо, Томас

...