2011-03-10 6 views
2

파이썬 트위스트 프레임 워크에서 현재 연결 프로토콜의 수를 계산하지만 난 오류가있어 방법 :내가 트위스트에서 활동 프로토콜의 수를 계산하려고했다

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) 
: 아래

exceptions.AttributeError: Factory instance has no attribute 'numProtocols' 

를 코드입니다

답변

5

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() 

또는, 당신은 단지 as done in the docs, 공장 인스턴스를 수정할 수 있습니다.

예 :

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() 
관련 문제