python - 在特定时间发送 Http 请求

标签 python http network-programming

我正在开发一个通过 https 请求与服务器通信的应用程序。我需要一条消息在非常短的时间窗口内到达服务器。我知道这个时间窗口的开启时间,精度只有半秒。我可以在之前和之后尽可能多地重复http请求,这没关系。

现在,这是我正在做的:

  • 我将 Python 与请求和 gevent 模块结合使用
  • 我创建了一个请求 session ,使用带有 1000 个连接的连接池的 httpadapter
  • 我在时间窗口周围的 1 秒内发送尽可能多的订单。

    self.session = requests.Session()
    self.session.mount('https://', requests.adapters.HTTPAdapter(pool_connections=100, 
                                                                 pool_maxsize=10000))
    def sendRequest()
        self.session.post(self.url, self.body)
    
    pool = gevent.pool.Pool(size = 10000)
    while time.time() < endTime:
        g = pool.spawn(sendRequest)
        gevent.sleep(0.0000001)
    

但是,我总是错过那个非常狭窄的窗口。我的代码似乎只发送 2 毫秒的 http 请求,即使我增加池大小或 我正在尝试提高发送消息的速度,以增加点击窗口的机会。但是,我不确定该怎么做。

我想知道:

  • 网卡是瓶颈吗?
  • Python 是瓶颈吗?
  • 我是否在我的代码中做了一些次优的事情(https 连接池的大小、gevent 的使用等)
  • 知道如何做好这件事吗?

最佳答案

我最终直接使用了 socket 模块,因此在较低级别控制了行为,并且成功了。请求模块很棒,但为这个特定问题增加了太多延迟。

关于python - 在特定时间发送 Http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30737603/

相关文章:

ASP.NET HttpWebRequest POST 仅在 VS 开发服务器上返回 "The remote server returned an error: (405) Method Not Allowed."

http - 在 Cache-Control HTTP header 中包含 max-age 和 s-maxage 有意义吗?

c - 发送源地址为 0.0.0.0 的 UDP 包

c - 如何确定原始数据包中http header 的起始字节?

python - Spyder ipython 控制台 'Home' 选项卡或 'Ctrl+A' 无法正常工作

python - 用其他列表过滤数组

通过 API 的 Facebook 智能好友列表

java - Peer 2 Java 中的对等连接

python - 在 Numpy 中从一个音高到另一个音高的正弦波滑音

java - 将 scipy 与 java 集成