twisted.web.client.agentのアクセスソケットオプション
-
25-10-2019 - |
質問
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要求の輸送として使用するかなり合理的な仮定であるためです。ただし、これはずっと賢いアイデアではないかもしれません。
所属していません StackOverflow