Dunaevlad
@Dunaevlad

Почему закрывается сокет содинение сразу после получение ответа?

Сообственно код:

import asyncio
from concurrent.futures import TimeoutError as ConnectionTimeoutError
import json
import websockets


async def command(client, data, status=None, timeout=10):
    while True:
        await client.send(json.dumps(data))
        try:
            receive = await asyncio.wait_for(client.recv(), timeout)
            code = json.loads(receive)["status"][0]
            if code == status:
                return receive
        except (KeyError, ValueError, ConnectionTimeoutError) as err:
            print(f"[error from command()] => {err}")
        finally:
            print(f"[websocket message] =>", receive)


async def main():
    async with websockets.connect("ws://example.com") as client:
        print(
            await command(
                client,
                {
                    "auth_token": ""
                },
                2999,
                10,
            )
        )


if __name__ == "__main__":
    asyncio.run(main())


While True поставил, однако он не работает
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
Dunaevlad
@Dunaevlad Автор вопроса
async def command(client, data, status=None):
    await client.send(json.dumps(data))
    while True:
        try:
            receive = await client.recv()
            code = json.loads(receive)["status"][0]
            if code == status:
                return receive
        except (KeyError, ValueError) as err:
            print(f"[error from command()] => {err}")
        finally:
            print(f"[websocket message] =>", receive)


Разобрался, надо строку await client.send(json.dumps(data)) вынести из While
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы