PHP 并发请求有没有更好的方法

2021-09-14 14:46:29 +08:00
 xiaobaiyihao
PHP 请求多个 URL,除了用 curl_multi 函数,有没有效率更高的方法,感觉 curl 是 fork 进程来请求,效率感觉不是很高
2978 次点击
所在节点    程序员
29 条回复
liuyibao
2021-09-15 10:00:38 +08:00
symfony/http-client

Responses are always asynchronous, so that the call to the method returns immediately instead of waiting to receive the response:

https://symfony.com/doc/current/http_client.html

用这个没错的,解析 Response 的时候才会阻塞,很好用的。
liuyibao
2021-09-15 10:09:07 +08:00
symfony/http-client 搜了下源码,好像是用 yield 实现的,性能应该是可以的,只有 php7 以上能用。php8 增加的 fiber 会更强悍。
zjsxwc
2021-09-15 12:55:51 +08:00
@xiaobaiyihao

> "@dusu fpm,性能每次请求必须在 300 ~ 400ms 内答应,百万吧,现在的情况就是卡在这个 curl_multi 请求上,> 本身这个接口也是高并发接口,接口内部要去并发请求其他接口"

300 ~ 400ms 内 百万请求,用什么 php 啊, 你带宽都要 2.5Gbps 了
zjsxwc
2021-09-15 12:56:27 +08:00
@xiaobaiyihao

> "@dusu fpm,性能每次请求必须在 300 ~ 400ms 内答应,百万吧,现在的情况就是卡在这个 curl_multi 请求上,> 本身这个接口也是高并发接口,接口内部要去并发请求其他接口"

300 ~ 400ms 内 百万请求,用什么 php 啊, 你带宽都要 6Gbps 了
xiaobaiyihao
2021-09-15 13:46:55 +08:00
@zjsxwc 现在就是怼机器来着,想办法优化
xiaobaiyihao
2021-09-15 13:48:03 +08:00
@liuyibao 这个好像不支持 protobuf
xiaobaiyihao
2021-09-15 13:49:10 +08:00
@zjsxwc 而且这是要求,现在就是达不到这种情况
Actrace
2021-09-15 14:35:01 +08:00
@xiaobaiyihao 更换到 CLI 下会有更多选择。PHP 内置了不少多线程,事件库,甚至可以用协程。可以单独写成一个服务,驻后台运行。
changz
2021-09-15 20:52:39 +08:00
@zjsxwc poll/select 在这种场景下性能不会比 epoll 低。。。

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

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

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

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

© 2021 V2EX