使用curl_multi_init这个需要注意进程数是否满足并发需求
最近做项目遇到一个应用场景,需要给客户做一个3D模型应用,结合数据做数字孪生。数据接口由客户端提供,3D模型应用里每一个数据参数都会对应一个数据接口,里面有200多个数据参数,对应着200多个数据接口。如果让客户端直接处理,那么需要调用200个接口,无疑会增加客户端数据处理的复杂度。所以我们做了一个数据代理服务器,对数据进行一层封装和处理,再返回给客户端,让客户端专注于界面和交互,而不是处理数据。
架构设计如图:
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
运营天数
总访问量
文章数量
-
-
-
交流群:157451741
新浪微博:草莽兴
发布评论