Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.08.2020, 20:13   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию BrokenPipeError: [Errno 32] Broken pipe роняет websocket сервер

Здравствуйте.

Имеется websocket сервер - https://github.com/Pithikos/python-websocket-server

Для небольшого пет проекта разместил websocket сервер на VPS. Постоянно вываливается ошибка и роняет сервер. На локальном сервере данная ошибка не встречается. Читал, гуглил, но пока ничего подходящего не нашел. На сколько понял, проблема происходит, когда внезапно клиент обрывает соединение. Не могу понять в каком месте происходит ошибка, чтобы ее отловить. Помогите разобраться, пожалуйста. Нужно ее перехватить и не давать ронять сервер.

Код:
Exception happened during processing of request from ('178.34.160.62', 4105)
Traceback (most recent call last):
  File "/usr/lib/python3.6/socketserver.py", line 724, in __init__
    self.handle()
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 149, in handle
    self.read_next_message()
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 161, in read_next_message
    b1, b2 = self.read_bytes(2)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 153, in read_bytes
    bytes = self.rfile.read(num)
  File "/usr/lib/python3.6/socket.py", line 586, in readinto
    return self._sock.recv_into(b)
ConnectionResetError: [Errno 104] Connection reset by peer

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.6/socketserver.py", line 654, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib/python3.6/socketserver.py", line 364, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 136, in __init__
    StreamRequestHandler.__init__(self, socket, addr, server)
  File "/usr/lib/python3.6/socketserver.py", line 726, in __init__
    self.finish()
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 275, in finish
    self.server._client_left_(self)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 114, in _client_left_
    self.client_left(client, self)
  File "server.py", line 51, in client_left
    server.send_message_to_all(disconnected)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 73, in send_message_to_all
    self._multicast_(msg)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 123, in _multicast_
    self._unicast_(client, msg)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 119, in _unicast_
    to_client['handler'].send_message(msg)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 194, in send_message
    self.send_text(message)
  File "/usr/local/lib/python3.6/dist-packages/websocket_server/websocket_server.py", line 240, in send_text
    self.request.send(header + payload)
BrokenPipeError: [Errno 32] Broken pipe
Arkuz вне форума Ответить с цитированием
Старый 24.08.2020, 01:12   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Мне кажется, Ваш дамп не вяжется с гитовским проектом. То ли Вы пилили напильником, то ли проект успел обновиться. Но на беглый взгляд примерно так: когда отваливается клиент, происходит обрабатываемое исключение, и в обработчике идёт рассылка сообщения о дисконнекте всем остальным. А вот если вдруг отвалилось сразу два клиента или больше, то тут возникает вложенное исключение - и вилы в бок.
Black Fregat вне форума Ответить с цитированием
Старый 24.08.2020, 13:02   #3
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Да, оказалось, что это старый мой проект, но вроде там ничего и не поменялось особенно.
Я все слил в новую версию. Ошибка продолжает появляться.

Вот моя версия - https://github.com/arkuz/websocket-server

У меня есть некоторый игровой клиент. Хостится на сайте. Вот я открываю браузер, делаю рефреш и вдруг почему-то происходит коннект, которого не должно быть. Так как выскакивает плашка для ввода имени и пока я не введу имя соединение не должно установиться. На локальной машине соедиинения нет и сервер не падает при рефрешах. На хостинге почему то есть.

Код:
New client connected and was given id 1
{'id': 9711, 'x': 1211, 'y': 1115}
{'me': {'id': 9711, 'x': 1211, 'y': 1115}, 'clients': [{'id': 9711, 'x': 1211, 'y': 1115}]}
Пару рефрешей и опять эта ошибка. Эксперементировал только на одном клиенте. Просто делаю несколько раз рефреш страницы и вылетает эта ошибка.

Код:
Server run
INFO:websocket_server.websocket_server:Listening on port 15000 for clients..
New client connected and was given id 1
{'id': 9711, 'x': 1211, 'y': 1115}
{'me': {'id': 9711, 'x': 1211, 'y': 1115}, 'clients': [{'id': 9711, 'x': 1211, 'y': 1115}]}
INFO:websocket_server.websocket_server:Client asked to close connection.
Client(1) disconnected
New client connected and was given id 2
{'id': 9649, 'x': 1930, 'y': 144}
{'me': {'id': 9649, 'x': 1930, 'y': 144}, 'clients': [{'id': 9649, 'x': 1930, 'y': 144}]}
INFO:websocket_server.websocket_server:Client asked to close connection.
Client(2) disconnected
New client connected and was given id 3
{'id': 9657, 'x': 1922, 'y': 1793}
{'me': {'id': 9657, 'x': 1922, 'y': 1793}, 'clients': [{'id': 9657, 'x': 1922, 'y': 1793}]}
INFO:websocket_server.websocket_server:Client asked to close connection.
Client(3) disconnected
New client connected and was given id 4
{'id': 9631, 'x': 1390, 'y': 866}
{'me': {'id': 9631, 'x': 1390, 'y': 866}, 'clients': [{'id': 9631, 'x': 1390, 'y': 866}]}
INFO:websocket_server.websocket_server:Client closed connection.
Client(4) disconnected
----------------------------------------
Exception happened during processing of request from ('178.34.163.182', 9631)
Traceback (most recent call last):
  File "/usr/lib/python3.6/socketserver.py", line 654, in process_request_thread
    self.finish_request(request, client_address)
  File "/usr/lib/python3.6/socketserver.py", line 364, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 168, in __init__
    StreamRequestHandler.__init__(self, socket, addr, server)
  File "/usr/lib/python3.6/socketserver.py", line 726, in __init__
    self.finish()
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 350, in finish
    self.server._client_left_(self)
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 147, in _client_left_
    self.client_left(client, self)
  File "server.py", line 54, in client_left
    server.send_message_to_all(disconnected)
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 88, in send_message_to_all
    self._multicast_(msg)
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 156, in _multicast_
    self._unicast_(client, msg)
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 152, in _unicast_
    to_client['handler'].send_message(msg)
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 246, in send_message
    self.send_text(message)
  File "/root/game/websocket-server/websocket_server/websocket_server.py", line 296, in send_text
    self.request.send(header + payload)
BrokenPipeError: [Errno 32] Broken pipe
----------------------------------------
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FileNotFoundError: [Errno 2] No such file or directory: raulIQ Python 8 11.10.2019 22:51
C | Как работает errno? Desdev Помощь студентам 1 11.08.2017 09:22
errno и math_errhandling в С semenaa Помощь студентам 9 09.07.2015 15:11
Консольный сервер + WebSocket Ferrun Java для Web (EE, Servlet, JSP, Tomcat, Spring MVC) 7 02.07.2014 13:14
websocket сервер на qt aaveter Qt и кроссплатформенное программирование С/С++ 0 27.10.2011 23:56