当第一个客户端连接在一起时运行什么?

时间:2017-09-29 07:18:21

标签: python-2.7 server twisted

所以我有一个用twisted编写的主服务器。我想在第一个客户端连接时在不同的端口上运行备份服务器。当第二个客户端连接时,不应重复此行为。 当最后一个客户端断开连接时,应该关闭备份服务器 我该如何实现这种行为? 目前我在反应堆开始运行之前运行批处理文件。但问题是这会产生无限循环。但我通过一个可以阻止它的论点。但是,这意味着当主服务器关闭且备份服务器正在接受客户端时,则会留下备份服务器。

1 个答案:

答案 0 :(得分:0)

您需要挂钩扭曲协议的connectionMadeconnectionLost事件。在这些内容中,您可以实现业务逻辑。

看一下以下事件:

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