1
如何从twisted.web.client.Agent访问底层套接字?我需要在这个套接字上启用TCP_NODELAY。twisted.web.client.Agent的访问套接字选项
如何从twisted.web.client.Agent访问底层套接字?我需要在这个套接字上启用TCP_NODELAY。twisted.web.client.Agent的访问套接字选项
不幸的是,代理并不像它直接使用Protocol实例那样容易,但也不是不可能。
的关键就在这里,在代理的类定义:
_protocol = HTTP11ClientProtocol
为了获得访问您可以覆盖connectionMade上HTTP11ClientProtocol运输,以及代理。
所以你最终的东西,如:
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节点连接在延迟链中。
** Note 2 **在这种情况下,假设'transport'有setTcpNoDelay()方法是很好的,因为这是一个非常合理的假设,您将使用TCP作为HTTP请求的传输。不过,这可能不是一个聪明的想法。
不要忘记'_'的意思是“私人”。 – 2011-04-28 11:38:45
@JP:我的实用主义者经常与我想要不违反API约定的图书馆维护者交战。不幸的是,实用主义者经常获胜。既然您对Twisted有更多的个人知识,您是否碰巧知道为什么在客户端中将“协议”属性标记为私有?这与许多其他工厂类型的对象有些不一致。 – Crast 2011-05-03 22:12:58