专注WEB开发 分享经验,沉淀知识

PHP一个接口如何批量请求第三方接口

 作者:chenxing  时间:2022-08-08 22:47  评论:

使用curl_multi_init这个需要注意进程数是否满足并发需求

最近做项目遇到一个应用场景,需要给客户做一个3D模型应用,结合数据做数字孪生。数据接口由客户端提供,3D模型应用里每一个数据参数都会对应一个数据接口,里面有200多个数据参数,对应着200多个数据接口。如果让客户端直接处理,那么需要调用200个接口,无疑会增加客户端数据处理的复杂度。所以我们做了一个数据代理服务器,对数据进行一层封装和处理,再返回给客户端,让客户端专注于界面和交互,而不是处理数据。

架构设计如图:

image-20220808220950718

PHP做这个数据服务器代理,该如何处理呢?

1.首先我们知道可以使用curl做PHP远程调用第三方接口。拉取对应的第三方接口数据处理后,再返回给客户端。

2.一个接口对应着一个PHP-FPM进程处理,接口里的curl请求都是串行的,也就是请求完第一个curl,等待返回结果后,才会继续下一个curl请求。这回造成接口内部curl请求一多,接口的响应时间会变长。

3.我们要解决 2 中的问题,核心问题是curl是否能够异步请求。并行的去处理所有的curl请求,这样子接口的响应时长取决于最长的一个curl的响应时长。

4.curl的异步请求需要用到curl_multi_init https://www.php.net/manual/en/function.curl-multi-init.php 具体的使用可以根据官方文档来。

5.如果本地测试话或者线上部署,需要注意PHP-FPM进程数。每一个curl请求需要对应一个PHP-FPM,如果开启的max_children子进程数过少,则无法并行处理,还会回到串行上来。使用curl_multi_init这个需要注意进程数是否满足并发需求。

以上就是我写这个项目遇到此场景的一个架构设计来降低数据处理的难度,以及PHP如何实现一个接口批量curl请求的解决方案。

除特别注明外,本站所有文章均为作者原创。 或分享自己的编程经验,或探讨工作中的问题,或聊以人生趣事。 转载请注明出处来自 http://www.qiusuoweb.com/157.html

发布评论

 提交评论
有人回复时邮件通知我

 评论(0)

站长头像
chenxing(PHP攻城狮)

运营天数

总访问量

文章数量

-

-

-

交流群:157451741

新浪微博:草莽兴

 近期文章

PHP一个接口如何批量请求第三方接口

 2022-08-08 22:47  122

Mac目录如何快速返回上一级?

 2022-07-21 17:27  246

Mac目录和终端如何快速切换

 2022-07-21 17:11  89

phpstorm一个窗口打开多个项目?

 2022-07-20 17:15  119

 最新评论

 诚心: 09月29日 23:01
学到了
来源: 如何一次性推送百万级别的消息
 Nick: 04月14日 12:26
网上的资料还是太老,都只是取一个元素,解决了一大难题
来源: redis set集合取出一组数据并删除
 skywalker: 11月03日 18:21
简洁明了
来源: mysql 获取某个日期的前一天或后一天
 lisheng: 05月09日 19:26
兴哥牛B加油哈兴哥成功的道路上你又进了一步 哈哈
来源: 一年时间又回到这里
 心态炸裂: 03月24日 10:54
No3.blindcomfirm 多了一个l,望改正!!!
来源: 微信小程序获取input值的总结
 666666: 11月08日 13:49
66666
来源: 一年时间又回到这里