Как подсчитать количество подключенных протоколов в витой среде Python - PullRequest
2 голосов
/ 10 марта 2011

Я пытался подсчитать количество активных протоколов в витой, но я получил ошибку:

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 Ответ

5 голосов
/ 10 марта 2011

Это потому, что 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()
...