Скрученный реактор.listenTCP периодически не может правильно подключиться

Я запускаю TCP-сервер в Linux, используя Reactor.listenTCP.

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

В моей реализации протокола нет ничего, что могло бы вызвать отключение. В клиентских реализациях нет ничего, что могло бы вызвать такое разъединение.

Сервер периодически отправляет некоторые данные всем пользователям, которых он находит в списке пользователей, используя sendLine(data).

Мне интересно, должен ли я выполнять какую-то операцию, когда клиент отключается, которую я пропустил, и это вызывает проблемы с сокетом.

class MsgHandler(Protocol):
    def __init__(self, factory):
        self.factory = factory
    def connectionMade(self):
        self.factory.users.append(self)
    def connectionLost(self, reason):
        self.factory.users.remove(self)
    def dataReceived(self, data):
        pass

class outputTcpServerFactory(Factory):
    def __init__(self, users):
        self.users = users
    def buildProtocol(self, addr):
        return MsgHandler(self) 

class Mainloop(object):
    def __init__(self):
        self.users = []
        s = reactor.listenTCP(port, outputTcpServerFactory(self.users))
        reactor.run()

---> В другом месте класса mainLoop есть код, который периодически запускается:

for client in self.users:
    client.sendLine(data)

person RoyHB    schedule 22.01.2014    source источник
comment
Пожалуйста, приложите простой, автономный, правильный пример, демонстрирующий вашу проблему. Этот не полный. sscce.org   -  person Glyph    schedule 23.01.2014


Ответы (1)


Вы должны всегда включать ведение журнала, чтобы видеть необработанные исключения, которые приложение встречи. Обычно они делают очевидным, почему что-то сломано.

person Jean-Paul Calderone    schedule 23.01.2014
comment
Спасибо, Жан-Поль. Я включил ведение журнала и посмотрю, что это даст. - person RoyHB; 26.01.2014