2 подключения к одному API в одном скрипте. Нужно ли пинговать оба? - PullRequest
0 голосов
/ 19 марта 2020

Я подключаюсь к API, который позволяет подписки, поэтому я читаю их каждый раз, когда в методе .recv() появляется новое сообщение, и передаю их основной функции. Этот API автоматически отключит любое соединение, если моя программа простаивает некоторое время. Чтобы решить эту проблему, они проверяют мою программу каждые 10 секунд (я могу настроить это), и мне нужно ответить на них, отправив test_message, чтобы сообщить серверу, что я не бездействую.

У меня есть скрипт с форма:

async def subscription_api(queue):
    #subscribe to various channels in the websocket and pass the response to the main function
    async with websockets.connect(api) as ws:
        await ws.send(json.dumps(subscription_msg))
        response = json.loads(await ws.recv())
        await queue.put(response)


async def main():
    queue = asyncio.Queue()
    subscription = asyncio.create_task(subscription_api(queue))
    #I need this api connection to send messages to the server in this function
    async with websockets.connect(api) as ws:
        subscription = await queue.get()
        if subscription == 'ping':
            #if the message I receive from the server is a ping, send a test_message
        else:
            #do stuff

Здесь у меня есть 2 вопроса:

  1. Несмотря на то, что я отправляю эти test_messages обратно на сервер, он все равно время от времени отключается (один раз каждые 2 Приблизительно 5 минут) вызов исключения с кодом 1006 (причина не указана). Любая идея, почему это может быть, какие-то распространенные ошибки, которые могут вызвать это? Я проверял свой код и пока не нашел причину.
  2. Как видите, в моем коде 2 соединения, по одному для каждой функции (async with websockets.connect(api) as ws:). Эти два соединения совместно используют каждое свойство, или они считаются как 2 отдельных соединения с API, и, следовательно, я должен отправлять тестовые сообщения для каждого отдельного лица, чтобы оба они "сообщали" серверу, что они не бездействуют? Или достаточно просто отправить его по одному соединению, потому что, опять же, они имеют одинаковые свойства?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...