Twisted의 최상위 서버에서 사용할 TCP 기반 프로토콜을 구현하고 싶습니다. 이러한 프로토콜 구현의 메커니즘은 분명합니다 (프로토콜을 상속하고 4 개의 상속 된 메소드를 덮어 쓰고 Factory를 빌드합니다).Python Twisted : 처리와 별도의 프로토콜
프로토콜 :
그러나, 내 프로토콜이있는 방식으로, 애플리케이션 로직에서 분리되고 싶어요, 파이썬 데이터 구조를 클라이언트에서 데이터를 수신 바이트 스트림을 디코딩하고 채워은 데이터 구조를 취 바이트 스트림을 인코딩하는 (텍스트 기반) 및 클라이언트
애플리케이션 로직 반응 : 상기 데이터 구조를 수신 및 평가 반환 응답 데이터 구조
Twisted 응용 프로그램을 다른 응용 프로그램에 의존하지 않게 만드는 방법은 무엇입니까? 느슨한 결합)? 나는 프로토콜 클래스가 매개 변수로 응용 프로그램 논리 콜백으로 인스턴스화 될 것이라고 생각하겠습니까?
편집 :
from twisted.internet.protocol import Protocol
from twisted.internet.protocol import Factory
from twisted.internet.endpoints import TCP4ServerEndpoint
from twisted.internet import reactor
class Logic:
def process(self, data):
return "Processed: %s" % data
class LineProtocol(Protocol):
def dataReceived(self, data):
print "Received: %s" % data
if self.factory._logic_callback:
ret = self.factory._logic_callback.process(data)
print "Sent: %s" % ret
self.transport.write(ret)
class LineFactory(Factory):
protocol = LineProtocol
def __init__(self, logic_callback = None):
if logic_callback:
self._logic_callback = logic_callback()
else:
self._logic_callback = None
endpoint = TCP4ServerEndpoint(reactor, 1234)
endpoint.listen(LineFactory(Logic))
reactor.run()
이는 "트위스트"방법을 고려겠습니까 : 한편
,이 있나요? 개선 할 것이 있다면?
이 코드는 LineFactory 내에 Logic 인스턴스를 만듭니다. 거기에 넣는 것이 좋습니까?
지금까지 무엇을 얻었습니까? – SingleNegationElimination
'process'는 임의의 라이브러리를 사용하는 어떤 언어의 메소드에 대해서 가능한 최악의 이름 중 하나입니다. –
@ Jean-PaulCalderone : 동의합니다.이 예제 문맥에서 저를 사용하는 것에 대해 저를 용서해주십시오. – Bernd