2011-03-03 5 views
0

저는 Twisted에서 dabling을 해왔고 문제를 보았습니다. 나는 telnet localhost xTwisted를 사용하여 상호 작용하는 서버?

내 코드는 다음처럼 처리 사용에 연결할 수있는 몇 가지 서버를 구현하고 있습니다 :

reactor.listenTCP(12001, server1, ....)

reactor.listenTCP(12002, server2, ....)

이 다음을 구축하는 내 공장을 사용하여 프로토콜

나는이 서버들이 어떻게 상호 작용할 수 있는지 궁금합니다. 예를 들어 클라이언트가 각 서버에서 공통된 값을 업데이트하라는 요청을 보내고이 값을 다른 서버로 중계하여 현재 값을 업데이트하려고한다고 가정 해 봅시다. 나는 reactor.connectTCP을 들여다 보았다. 그러나 이것은 내가 원하는 것을하지 않는 것처럼 보인다. 텔넷 명령을 사용하지 않고 서버에 연결할 수 있습니까?

답변

0

확실히. 이를 위해 일반적인 파이썬 기술을 사용하십시오. 업데이트되는 가치에 대한 예를 들어 봅시다.

from twisted.internet import reactor 
from twisted.internet.protocol import ServerFactory, Protocol 

class Counter(object): 
    def __init__(self): 
     self._value = 0 

    def increment(self): 
     self._value += 1 

    def get(self): 
     return self._value 


class Incrementor(Protocol): 
    def connectionMade(self): 
     self.factory.value.increment() 
     self.transport.loseConnection() 


class Reporter(Protocol): 
    def connectionMade(self): 
     self.transport.write("Value is %d\n" % (self.factory.value.get(),)) 
     self.transport.loseConnection() 

server1 = ServerFactory() 
server1.protocol = Incrementor 

server2 = ServerFactory() 
server2.protocol = Reporter 

server1.value = server2.value = Value() 

reactor.listenTCP(12001, server1) 
reactor.listenTCP(12002, server2) 
reactor.run() 

이 두 공장은 지금 가변 상태의 조각을 공유 : 나는 그것을 하나 개의 서버와 다른 서버에 연결에 발송 값에 연결에 의해 증가 될 수있는 간단한 카운터 만들 수 있습니다. 디폴트의 ​​ServerFactory가 인스턴스화하는 프로토콜의 속성으로서 유용하게 설정되므로, 프로토콜은 팩토리에 액세스 할 수 있습니다. 이것에 의해, 프로토콜도 팩토리의 공유 가능 상태에 도달 할 수 있습니다. 하나는 카운터를 증가시키고 다른 하나는 값을 검색합니다.

공유 상태 및 메소드 호출을 사용하여 비 프로토콜, 비 공장 객체에 이와 같은 많은 시나리오를 구성 할 수 있습니다.

관련 문제