所以我有一个用twisted编写的主服务器。我想在第一个客户端连接时在不同的端口上运行备份服务器。当第二个客户端连接时,不应重复此行为。 当最后一个客户端断开连接时,应该关闭备份服务器 我该如何实现这种行为? 目前我在反应堆开始运行之前运行批处理文件。但问题是这会产生无限循环。但我通过一个可以阻止它的论点。但是,这意味着当主服务器关闭且备份服务器正在接受客户端时,则会留下备份服务器。
答案 0 :(得分:0)
您需要挂钩扭曲协议的connectionMade
和connectionLost
事件。在这些内容中,您可以实现业务逻辑。
看一下以下事件:
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
class Protocol(LineReceiver):
def __init__(self, factory):
self.factory = factory
def connectionMade(self):
self.factory.clients.add(self)
print('Client added. count:', len(self.factory.clients))
def connectionLost(self, reason):
self.factory.clients.remove(self)
print('Client removed. count:', len(self.factory.clients))
def lineReceived(self, line):
self.transport.write(line)
class MyFactory(Factory):
def __init__(self):
self.clients = set()
def buildProtocol(self, addr):
return Protocol(self)
reactor.listenTCP(1520, MyFactory())
reactor.run()
您可以使用telnet测试此服务器:
telnet 127.0.0.1 1520