質問

twisted.web.client.agentから基礎となるソケットにアクセスするにはどうすればよいですか?このソケットでTCP_NODELAYを有効にする必要があります。

役に立ちましたか?

解決

残念ながら、エージェントは、プロトコルインスタンスを直接操作している場合ほど簡単ではありませんが、不可能でもありません。

鍵は、エージェントのクラス定義にあります。

_protocol = HTTP11ClientProtocol

輸送にアクセスするために、http11clientprotocolおよびエージェントで接続madeをオーバーライドすることができます。

だからあなたは次のようなものになります:

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 **この場合、「輸送」には setcpnodelay() 方法は、TCPをHTTP要求の輸送として使用するかなり合理的な仮定であるためです。ただし、これはずっと賢いアイデアではないかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top