如何限制扭曲的tcpserver工厂的1个连接

时间:2018-08-29 02:53:26

标签: python twisted twisted.internet

我有一个扭曲的工厂,它通过LineReceiver构建一个协议,监听TCP套接字。

我希望将与LineReceiver的客户端连接数限制为1,并让其他客户端请求“拒绝”。

我还看到了其他一些提示,这些提示涉及如何使客户端等待(How to limit the number of simultaneous connections in Twisted),但是我希望明确拒绝任何其他连接。

我的代码是上一个URL的简化形式,用于限制同时连接。

我是否需要在工厂拒绝连接或建立协议,然后立即关闭连接?

编辑:啊哈。我想我解决了它,因为在协议中收到连接时,如果buildCount> 1则self.transport.abortConnection()似乎可以工作

关于这是否是正确方法的任何建议/评论?也许“拒绝连接”比服务器接受连接然后立即将其关闭会更好。

class myProtocol(LineReceiver):

    def __init__(self, factory):
        self.factory = factory

    def connectionMade(self):
        if self.factory.buildCount > 1:
            self.transport.abortConnection()
        else:
            self.sendLine("connection accepted".encode())

    def connectionLost(self):
        # decrement count of connected clients
        self.factory.buildCount -= 1

    def lineReceived(self, line):
        self.sendLine("echo '{0}'".format(line.decode()).encode())

class myFactory(Factory):

    def __init__(self, mode, logger):
        """
        Factory only runs once
        """
        self.buildCount = 0

    def buildProtocol(self, addr):
        """
        Factory runs buildProtocol for each connection
        """
        self.buildCount += 1
        return myProtocol(self)

 reactor.listenTCP(9000, myFactory())
 reactor.run()

0 个答案:

没有答案