2011-04-27 4 views

답변

4

유감스럽게도 Agent는 프로토콜 인스턴스로 직접 작업하는 경우처럼 쉽게 만들지 않지만 불가능하지는 않습니다.

의 핵심은 에이전트의 클래스 정의에서, 여기있다 : 위해

_protocol = HTTP11ClientProtocol 

당신이 HTTP11ClientProtocol에 connectionMade를 오버라이드 (override) 할 수있는 전송뿐만 아니라 에이전트에 접근 할 수 있습니다.

from twisted.web import client 
class MyHTTPClient(client.HTTP11ClientProtocol): 
    def connectionMade(self): 
     self.transport.setTcpNoDelay(True) 
     client.HTTP11ClientProtocol.connectionMade(self) # call the super-class's connectionMade 

class MyAgent(client.Agent): 
    _protocol = MyHTTPClient 

지금 에이전트 대신에 MyAgent을 사용하고 클라이언트에서 TCP의 nodelay를 얻을 수 있습니다 :

그래서 당신은 같은 것을 끝낼 것입니다.

** ** ** 이렇게하는 유일한 방법은 아니지만 그렇게 할 수있는 방법 중 하나는 Agent.request를 계속 사용하는 것입니다. 또는 요청을 작성하고 클라이언트에 연결하고 TCP nodelay와 함께 요청을 지연 체인에 연결하는 자체 에이전트를 작성하십시오.

** 참고 2 **이 경우에는 '전송'에 setTcpNoDelay() 방법이 있다고 가정하는 것이 좋습니다. 이는 TCP를 HTTP 요청 전송 용으로 사용하는 것이 합리적이라고 가정하기 때문입니다. 그러나 이것은 완전히 뒤틀린 현명한 생각이 아닐 수도 있습니다.

+1

'_'은 "개인"을 의미한다는 것을 잊지 마십시오. –

+0

@JP : 실용 주의자는 API 협약에 위배되지 않는 도서관 관리자와 전쟁 중입니다. 불행하게도 실용 주의자는 종종 승리합니다. Twisted에 대한 개인적 지식이 더 많으므로 클라이언트의 경우 "프로토콜"속성이 개인으로 표시된 이유를 알 수 있습니까? 이것은 다른 많은 공장 유형 객체와 다소 부합됩니다. – Crast