访问twisted.web.client.Agent的套接字选项

时间:2011-04-27 23:30:22

标签: python twisted twisted.web twisted.client

如何从twisted.web.client.Agent访问底层套接字?我需要在这个套接字上启用TCP_NODELAY。

1 个答案:

答案 0 :(得分:4)

不幸的是,Agent并没有像你直接使用Protocol实例那样容易,但它也不是不可能。

关键在于,在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 nodelay连接在一个延迟链中。

**注2 **在这种情况下,可以假设'transport'具有setTcpNoDelay()方法,因为假设您将使用TCP作为HTTP请求的传输,这是一个非常合理的假设。不过,这可能不是一个明智的想法。