저는 Twisted에 새로 입문했습니다. 그래서 이것은 신참 실수라고 확신합니다. 나는 클라이언트로부터 메시지를받는 간단한 서버를 만들었고 서버는 메시지 수신시 콘솔에 메시지를 출력하는 콜백을 발생시킨다.새로운 지연을 생성하지 않는 팩토리 인스턴스
처음에는 서버가 예상대로 작동합니다. 불행히도, 두 번째 클라이언트를 시작할 때 나는 follow error "twisted.internet.defer.AlreadyCalledError"를 얻습니다. 공장에서 연기 된 새로운 인스턴스를 만들 것입니다. 즉, 이전에 새 지연이 호출되지 않았습니까?
아래 코드를 참조하십시오. 어떤 도움을 주시면 감사하겠습니다.
하나의LockServerFactory
이제까지 당신의 프로그램에서 만든이 있음을
import sys
from twisted.internet.protocol import ServerFactory, Protocol
from twisted.internet import defer
class LockProtocol(Protocol):
lockData = ''
def dataReceived(self, data):
self.lockData += data
if self.lockData.endswith('??'):
self.lockDataReceived(self.lockData)
def lockDataReceived(self, lockData):
self.factory.lockDataFinished(lockData)
class LockServerFactory(ServerFactory):
protocol = LockProtocol
def __init__(self):
self.deferred = defer.Deferred() # Initialise deferred
def lockDataFinished(self, lockData):
self.deferred.callback(lockData)
def clientConnectionFailed(self, connector, reason):
self.deferred.errback(reason)
def main():
HOST = '127.0.0.1' # localhost
PORT = 10001
def got_lockData(lockData):
print "We have received lockData. It is as follows:", lockData
def lockData_failed(err):
print >> sys.stderr, 'The lockData download failed.'
errors.append(err)
factory = LockServerFactory()
from twisted.internet import reactor
# Listen for TCP connections on a port, and use our factory to make a protocol instance for each new connection
port = reactor.listenTCP(PORT,factory)
print 'Serving on %s' % port.getHost()
# Set up callbacks
factory.deferred.addCallbacks(got_lockData,lockData_failed)
reactor.run() # Start the reactor
if __name__ == '__main__':
main()