我有一个扭曲的工厂,它通过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()