Как подсчитать количество подключенных протоколов в витой среде Python
Я пытался подсчитать количество активных протоколов в витой, но я получил ошибку:
exceptions.AttributeError: Factory instance has no attribute 'numProtocols'
Ниже приведен код:
class EchoPro(Protocol):
def connectionMade(self):
self.factory.numProtocols = self.factory.numProtocols+1
if self.factory.numProtocols > 100:
self.transport.write("Too many connections, try later")
self.transport.loseConnection()
def connectionLost(self, reason):
self.factory.numProtocols = self.factory.numProtocols-1
def dataReceived(self, data):
self.transport.write(data)
1 ответ
Решение
Это потому что self.factory
не содержит numProtocols
приписывать.
Чтобы настроить фабрику протокола, вы создаете фабрику для своего протокола путем создания подклассов twisted.internet.protocol.Factory
,
Пример:
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
class Echo(Protocol):
# ... your implementation as it is now ...
class EchoFactory(Factory): # Factory for your protocol
protocol = Echo
numProtocols = 0
factory = EchoFactory()
factory.protocol = Echo
reactor.listenTCP(8007, factory)
reactor.run()
Кроме того, вы можете просто изменить экземпляр фабрики после его создания, как это сделано в документации.
Пример:
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
class Echo(Protocol):
# ... your implementation as it is now ...
def getEchoFactory():
factory = Factory()
factory.protocol = Echo
factory.numProtocols = 0
return factory
reactor.listenTCP(8007, getEchoFactory())
reactor.run()