【发布时间】:2011-04-27 23:30:21
【问题描述】:
如何从 twisted.web.client.Agent 访问底层套接字?我需要在这个套接字上启用 TCP_NODELAY。
【问题讨论】:
标签: python twisted twisted.web twisted.client
如何从 twisted.web.client.Agent 访问底层套接字?我需要在这个套接字上启用 TCP_NODELAY。
【问题讨论】:
标签: python twisted twisted.web twisted.client
不幸的是,Agent 并没有像您直接使用协议实例那样简单,但这也不是不可能的。
关键在这里,在Agent的类定义中:
_protocol = HTTP11ClientProtocol
为了访问传输,您可以覆盖 HTTP11ClientProtocol 上的 connectionMade 以及代理。
所以你最终会得到类似的东西:
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 代替 Agent,您将在客户端获得 TCP nodelay。
** 注意 **,这不是执行此操作的唯一方法,而是您可以这样做并继续使用 Agent.request 的一种方法。或者,编写您自己的代理来制作请求并将其连接到客户端,并将您的请求与 TCP 节点层一起连接到延迟链中。
** 注意 2 ** 在这种情况下,假设 'transport' 具有 setTcpNoDelay() 方法很好,因为这是一个非常合理的假设,您将使用 TCP 作为 HTTP 请求的传输。不过,这可能不是一个完全扭曲的聪明想法。
【讨论】:
_ 的意思是“私人的”。