如何才能在 Python 中提高得到 https 响应速度

2022-01-16 11:02:43 +08:00
 wanliyi

我用 python 发送一个 https 请求,收到响应居然花了接近 1s ,显然有点不能接受,有什么好的解决方案吗,不论用多大的带宽速度也都在 1s 左右

2201 次点击
所在节点    问与答
18 条回复
Rxianbei
2022-01-16 11:05:32 +08:00
这个问题让人很难回答,对本例来说,你这个是服务器的性能问题,和客户端没有半毛钱关系
makdon
2022-01-16 11:15:15 +08:00
从哪里请求哪里的,https 握手就化不少时间了,如果请求国外的,1s 也确实差不多了
ClericPy
2022-01-16 11:16:49 +08:00
你只给个结果不给线索, 只能胡猜了...

1. 复用连接
2. 禁用 ssl
3. 开高并发, TCPConnector limit 开大点
wanliyi
2022-01-16 11:19:56 +08:00
@makdon 请求 alipay.com ,返回网页 html
wanliyi
2022-01-16 11:21:30 +08:00
@ClericPy 只请求单次开并发应该没用吧
whenov
2022-01-16 11:31:29 +08:00
@wanliyi 只请求单次为啥 1s 不能接受啊
wanliyi
2022-01-16 11:34:54 +08:00
@whenov ttfb500ms 不就应该算过长了吗
pengtdyd
2022-01-16 11:55:36 +08:00
换 C
wanliyi
2022-01-16 14:04:15 +08:00
@pengtdyd 自己写 socket ?
zwy100e72
2022-01-16 15:13:24 +08:00
可以从几个方向排查

1. DNS: 楼主这 1s 时间中有包含 DNS 查询时间吗?如果有的话,通过 dig 命令确认 DNS 响应时间是不是过大,如果 DNS 延迟较高,可通过更换其他 DNS 或者本地 DNS 缓存的方式来降低 DNS 的影响

2. 连接时的开销:请求 alipay.com 时会涉及到 TCP 连接、301 跳转、TCP 重连、TLS 协商等流程,可通过抓包分析是否这个阶段开销过高,通过优化连接时参数来降低影响;也可以通过连接复用降低影响

3. 楼主的目标:楼主需要明确需求,是“单次连接时长小于 N ms”,还是 “多次连接,p50 / p90 / p99 延迟指标小于 N ms”。

4. 程序本身的开销:如果连接时 CPU 占用过高,可以用相关 profiler 工具分析热点,尝试通过更换效率更高的框架来降低开销

最后,当你在讨论 “1s” 这个指标时,有可能不是带宽瓶颈。如果带宽不是瓶颈,那么再增加带宽也是无法加速连接的。
deplivesb
2022-01-16 15:17:46 +08:00
gesse
2022-01-16 15:39:24 +08:00
@deplivesb
破案了
wanliyi
2022-01-16 16:08:50 +08:00
@deplivesb 额,当然不是直接这样,是 get 支付界面
wanliyi
2022-01-16 16:09:07 +08:00
@zwy100e72 好的,我需要排查一下,谢谢
wanliyi
2022-01-16 16:18:02 +08:00
@zwy100e72 单次请求 waitting(TTFB)时间能达到 800ms ,请问这个阶段时间是无法优化的吗
documentzhangx66
2022-01-17 00:22:42 +08:00
deplivesb 这位老哥给了你一条很好的思路。

你可以在每一处关键位置,加上时间戳,然后去百度开一台按分钟计费的云主机,接着对比一下自己 PC 与云主机的每个时间戳。

按分钟计费的云主机,我跑一次这种简单测试,就几毛钱成本...
aladdinding
2022-01-17 09:09:38 +08:00
curl -v 先看看 curl 的时间
0312birdzhang
2022-01-17 19:11:23 +08:00
在 sailfishos 上开发 app 遇到过,在 dns 解析花了很长时间

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX