在特定时间发送 Http 请求
Send Http request at specific time
我正在开发一个通过 https 请求与服务器通信的应用程序。我需要一条消息在非常短的时间内到达服务器 window。我知道这个时间的开场时间window,精度只有半秒。我可以在前后重复多次http请求,没关系。
现在,我正在做的是:
- 我使用 Python 请求和 gevent 模块
- 我创建了一个请求会话,使用一个带有 1000 个连接的连接池的 httpadapter
我在 window 左右的 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)
但是,我总是错过 window,它非常狭窄。我的代码似乎只发送 2 毫秒的 http 请求,即使我增加池大小或
我正在尝试提高发送消息的速度,以增加点击 window 的机会。但是,我不确定该怎么做。
我想知道:
- 网卡是瓶颈吗?
- python 是瓶颈吗?
- 我是否在我的代码中做了一些次优的事情(https 连接池的大小、gevent 的使用等)
- 知道如何做好吗?
我最终直接使用了 socket 模块,因此在较低级别控制了行为,并且成功了。 requests 模块很棒,但为这个特定问题增加了太多延迟。
我正在开发一个通过 https 请求与服务器通信的应用程序。我需要一条消息在非常短的时间内到达服务器 window。我知道这个时间的开场时间window,精度只有半秒。我可以在前后重复多次http请求,没关系。
现在,我正在做的是:
- 我使用 Python 请求和 gevent 模块
- 我创建了一个请求会话,使用一个带有 1000 个连接的连接池的 httpadapter
我在 window 左右的 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)
但是,我总是错过 window,它非常狭窄。我的代码似乎只发送 2 毫秒的 http 请求,即使我增加池大小或 我正在尝试提高发送消息的速度,以增加点击 window 的机会。但是,我不确定该怎么做。
我想知道:
- 网卡是瓶颈吗?
- python 是瓶颈吗?
- 我是否在我的代码中做了一些次优的事情(https 连接池的大小、gevent 的使用等)
- 知道如何做好吗?
我最终直接使用了 socket 模块,因此在较低级别控制了行为,并且成功了。 requests 模块很棒,但为这个特定问题增加了太多延迟。