Python Websockets, как настроить время ожидания подключения - PullRequest
0 голосов
/ 29 января 2019

Допустим, сервер WebSocket временно отключен и отбрасывает входящие пакеты (а не отклоняет их).

В настоящее время между попыткой соединения и TimeoutError

* проходит около 95 секунд.1005 * Кажется, я не могу найти способ уменьшить это окно (чтобы я мог попробовать другой сервер WebSocket)

Это демонстрационный код, который я запускаю: (только что взят из официальных документов )

#!/usr/bin/env python

import asyncio
import websockets
import os
import socket
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)-8s [%(name)s.%(funcName)s:%(lineno)d]: %(message)s', datefmt='%m-%d %H:%M:%S', )


host = os.environ.get('SERVER_URL','localhost:9090')
self_id = os.environ.get('SELF_ID',socket.gethostname())

connect_url =f'ws://{host}/{self_id}'
logging.info(f'Connect to: {connect_url}')

async def hello(uri):
    logging.info(f'Connecting to {uri}')
    async with websockets.connect(uri, timeout=1, close_timeout=1) as websocket:
        logging.info(f"Conected to {uri}")
        async for message in websocket:
            await websocket.send(message)

asyncio.get_event_loop().run_until_complete(
    hello(connect_url))

1 Ответ

0 голосов
/ 20 июня 2019

Вы можете использовать функцию asyncio wait_for () следующим образом:

from concurrent.futures import TimeoutError as ConnectionTimeoutError
# whatever url is your websocket server
url = 'ws://localhost:9090'
# timeout in seconds
timeout = 10  
try:
    # make connection attempt
    connection = await asyncio.wait_for(websockets.connect(url), timeout)
except ConnectionTimeoutError as e:
    # handle error
    print('Error connecting.')

Это вызовет исключение <class 'concurrent.futures._base.TimeoutError'>, которое может быть перехвачено блоком except ConnectionTimeoutError.

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