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

标签 python twisted twisted.web twisted.client

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

最佳答案

不幸的是,如果您直接使用 Protocol 实例,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 nodelay。

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

关于python - 访问 twisted.web.client.Agent 的套接字选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5811921/

相关文章:

python - Web 服务中的 Twisted 延迟与阻塞

python - 扭曲 deferToThread 中的延迟中未处理的错误

python - 使用 cv2 检测 2048 年的瓷砖方 block

Python包?

python - 雪茄 - 10/Unpickle

python - 关闭 Twisted 中的非事件连接

python - 使用 Python、Twisted 和 Flask 的服务器发送事件 : is this a correct approach for sleeping?

python - 我是否正确解析了这个 HTTP POST 请求?

python - 扭曲的网络代理

Python 3,按顺序获取 IP 地址和 Ping 的文本文件