Клиентская библиотека Python websockets — не обнаруживает закрытие с сервера?

#python #websocket

#python #websocket

Вопрос:

У меня есть сервер (Bootstrap Java), который обслуживает websockets. Я пытаюсь использовать библиотеку python websockets для создания платформы тестирования интеграции, но я не знаком с python asyncio, поэтому я думаю, что совершаю некоторые ошибки для начинающих!

Я создал свой websocket с

     async def __async_connect(self, address):
    print("opening websocket on ", address)
    self.ws = await websockets.connect(address)

    def open_connection(self, address, firmware_version="103"):
    if self.ws is None:
        loop = asyncio.get_event_loop()
        loop.run_until_complete(self.__async_connect(address))
 

и может отправлять / получать сообщения.
Однако, когда сервер решает закрыть websocket, клиент python продолжает работать и даже отправляет ему сообщения с

сообщение = ожидает self.ws.send(json.dumps (сообщение))

Я тестировал с использованием расширения chrome websocket client, которое правильно определяет, что сервер закрыл соединение. Я также протестировал с помощью ping_interval= None, чтобы увидеть, были ли пинги, поддерживающие соединение, но это не так. Я что-то упускаю, что позволило бы python обнаружить, что сервер закрыл соединение? Я неправильно закрываю веб-сокеты, несмотря на то, что как расширение Chrome, так и websocket-client смогли обнаружить закрытие?

Комментарии:

1. Попробуйте найти какой-нибудь пример с использованием функций on_connect и on_close. Это может помочь.

2. Вот оно: pypi.org/project/websocket_client

3. Привет @Raxodius — спасибо за быстрый ответ, но на самом деле это другая библиотека. Я использую библиотеку python «websockets», которая основана на asyncio. К сожалению, с библиотекой, которую вы связали, был ряд проблем, в том числе то, что она не поддерживала python 3.8 .

4. Так что, может быть, попробуйте написать функцию типа: сервер отправляет какое-то сообщение при закрытии, клиент ищет это сообщение и когда оно появляется, оно само закрывается. Самое простое решение, которое приходит мне на ум.

5. Вы пробовали это: websockets.readthedocs.io/en/stable /…