Я запускаю 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)