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

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

Сообщение Anonymous »

Я пытаюсь создать простой веб-сервер с Python, который принимает соединения и присваивает каждому соединению идентификатор. Затем я могу отправить сообщение каждому клиенту, учитывая его идентификатор. Проблема заключается в том, что клиент отключается ненормально без надлежащего отключения (из-за сетевой ошибки на стороне клиента). Затем я получаю сообщение об ошибке OS: [WinError 121] Срок ожидания семафора истек.
Пожалуйста, найдите код ниже:
import asyncio
import websockets
import uuid

clients = {}

def generate_client_id():
return str(uuid.uuid4()) # Generates a random unique identifier

async def register(websocket):
client_id = generate_client_id()
clients[client_id] = websocket
print(f"Client {client_id} connected.")
return client_id

async def unregister(client_id):
if client_id in clients:
del clients[client_id]
print(f"Client {client_id} disconnected.")

async def send_message_to_client(client_id, message):
websocket = clients.get(client_id)
if websocket:
try:
await websocket.send(message)
except websockets.exceptions.ConnectionClosed as e:
print(f"Error: Failed to send message to {client_id} - connection closed: {e}")
await unregister(client_id)
except Exception as e:
print(f"Unexpected error with {client_id}: {e}")
await unregister(client_id)
else:
print(f"Client {client_id} not connected.")

async def handle_connection(websocket, path):
try:
client_id = await register(websocket)

try:
while True:
message = await websocket.recv()
print(f"Received message from {client_id}: {message}")
except websockets.exceptions.ConnectionClosed as e:
print(f"Client {client_id} connection closed: {e}")
except Exception as e:
print(f"Unexpected error with client {client_id}: {e}")
finally:
await unregister(client_id)

except Exception as e:
print(f"Error registering client: {e}")

async def main():
server = await websockets.serve(handle_connection, "0.0.0.0", 8765)
print("Server running on ws://0.0.0.0:8765")

await server.wait_closed()

# Run the server
asyncio.run(main())

Я пытался добавить разные исключения, чтобы отловить ошибку, но безуспешно. Это повторяется снова.
Журнал приложения можно найти ниже:
Server running on ws://0.0.0.0:8765
Client e529c3bf-121f-4408-aa6b-ac17774dbe94 connected.
data transfer failed Traceback (most recent call last):
...
OSError: [WinError 121] The semaphore timeout period has expired
Client e529c3bf-121f-4408-aa6b-ac17774dbe94 connection closed.
Client e529c3bf-121f-4408-aa6b-ac17774dbe94 disconnected.


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

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

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

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

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

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

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