Веб-сокет с ошибкой Python: [WinError 121] Срок ожидания семафора истекPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Веб-сокет с ошибкой Python: [WinError 121] Срок ожидания семафора истек

Сообщение Anonymous »

РЕДАКТИРОВАТЬ: я предоставляю официальный код для примера сервера asyncio websocket с веб-страницы веб-сокета Python: https://websockets.readthedocs.io/en/stable/index.html
Ошибка [WinError 121] появляется, когда клиент подключается к серверу, а затем ненормально отключается из-за потери сетевого подключения. Чтобы проверить это, я намеренно попытался соединить клиента с сервером WebSocket, а затем, пока соединение было открыто, отключил сеть клиента. Затем появилась ошибка.
Вот как можно воспроизвести ошибку:

[*]Скопируйте код сервера и вставьте его в py-файл и запустите.
[*]Получите любой клиентский метод. Я использовал Postman с другого компьютера (не с того же хоста, на котором работает сервер). Вы также можете использовать клиентские приложения WebSocket на своем смартфоне.
[*]Убедитесь, что компьютер, на котором работает сервер, и клиент, находятся в одной сети.
< li>Определите IP-адрес сервера.
[*]Подключите клиент к серверу.
[*]Отключите сеть клиента, оставив соединение открытым. (Выключив Wi-Fi, отсоединив кабель Ethernet и т. д.)
[*]Подождите около 30 секунд, и вы увидите появление указанной ошибки.

Код сервера указан ниже:

Код: Выделить всё

#!/usr/bin/env python

"""Echo server using the asyncio API."""

import asyncio
from websockets.asyncio.server import serve

async def echo(websocket):
async for message in websocket:
await websocket.send(message)

async def main():
async with serve(echo, "0.0.0.0", 8765) as server:
await server.serve_forever()

if __name__ == "__main__":
asyncio.run(main())
Обратите внимание, что я попробовал то же самое с примером потоковой обработки, представленным на странице веб-сокета Python, и не получил никакой ошибки или сообщения вообще.
Я думаю, так и должно быть. что-то с asyncio.
Чтобы лучше понять причину ошибки, я предоставляю полную неразрезанную трассировку стека.
Пожалуйста, найдите журнал приложение ниже:

Код: Выделить всё

connection handler failed
Traceback (most recent call last):
File "C:\Users\Jusuf Rrustaj\AppData\Local\Programs\Python\Python312\Lib\asyncio\proactor_events.py",
line 286, in _loop_reading
length = fut.result()
^^^^^^^^^^^^
File "C:\Users\Jusuf Rrustaj\AppData\Local\Programs\Python\Python312\Lib\asyncio\windows_events.py", line 803, in _poll
value = callback(transferred, key, ov)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Jusuf Rrustaj\AppData\Local\Programs\Python\Python312\Lib\asyncio\windows_events.py", line 462, in finish_socket_func
return ov.getresult()
^^^^^^^^^^^^^^
OSError: [WinError 121] The semaphore timeout period has expired

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "C:\Users\Jusuf Rrustaj\AppData\Local\Programs\Python\Python312\Lib\site-packages\websockets\asyncio\server.py", line 374, in conn_handler
await self.handler(connection)
File "e:\Programming\asyncio websocket\server.py", line 10, in echo
async for message in websocket:
File "C:\Users\Jusuf Rrustaj\AppData\Local\Programs\Python\Python312\Lib\site-packages\websockets\asyncio\connection.py", line 224, in __aiter__
yield await self.recv()
^^^^^^^^^^^^^^^^^
File "C:\Users\Jusuf Rrustaj\AppData\Local\Programs\Python\Python312\Lib\site-packages\websockets\asyncio\connection.py", line 279, in recv
raise self.protocol.close_exc from self.recv_exc
websockets.exceptions.ConnectionClosedError: no close frame received or sent
Какое решение я ищу?
Иметь фрагмент кода, который идентифицирует, что клиент потерял соединение, и не выбрасывать ошибки.

Подробнее здесь: https://stackoverflow.com/questions/792 ... od-has-exp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»