一个可以在 PHP -FPM 环境来并发访问 HTTP 接口的工具类

2021-04-26 20:13:20 +08:00
 sun2920989

https://github.com/CodeApePro/TcpMockHttp

这并不是一个开源的项目,只是个人在使用的一段工具类代码.

原理是通过 sockets 扩展创建 tcp 连接,在 tcp 连接上传输符合 http1.1 协议的数据,从而将发送数据与读取结果分开.

发出来以供遇到类似场景时参考.

2310 次点击
所在节点    PHP
45 条回复
sun2920989
2021-05-10 16:27:28 +08:00
一个新的思路是,既然 curl_multi 的管道复用,会尽可能的使用已有连接,那么对于未超过限制的请求,每次创建一个 curl_multi_init 和 curl_init,并打开 curl_multi 的管道复用,对于超过限制的请求,就使用已存在的 curl_multi_init 再次发送一个新的 curl_init.至此,已经基本可以使用 curl_multi 实现我之前用 tcp 模拟时实现的全部功能.唯一的问题和之前测试结果一样,多个 curl_multi_init 实例同时存在同时执行时效率较差,比使用 tcp 模拟或使用全局唯一的 curl_multi_init 效率下降非常多.
@sxbxjhwm #39 仅供参考.
sxbxjhwm
2021-05-10 16:49:01 +08:00
@sun2920989 我的例子并没有用到多个 curl_multi_init 的实例,curl_multi_init 返回的是一个栈,你就把它当成一个队列,所有 curl_multi_exec 都在复用这个栈,如果你有需求大可以多创建几个队列,但这样显然没有意义。
sun2920989
2021-05-10 16:51:18 +08:00
@sxbxjhwm #42 只是为了做不阻塞情况下的并发数量限制.
sxbxjhwm
2021-06-02 10:29:09 +08:00
sun2920989
2021-06-02 10:53:10 +08:00
@sxbxjhwm #44 好的 谢谢.

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

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

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

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

© 2021 V2EX