Jam*_*mes 5 php curl soap web-services
我的目标是使用各种Web服务,然后合并结果.
我使用PHP cURL这样做,但随着Web服务数量的增加,我的服务因为进程等待响应然后向下一个Web服务发出请求而变慢.
我使用curl_multi解决了这个问题,一切正常.
现在,我有一个新问题,因为我在我的服务中添加了新的Web服务,使用Soap协议,我不能再同时执行请求,因为我没有使用cURL进行Soap Web服务,我使用SoapClient.
我知道我可以使用soap指令制作XML,然后使用cURL发送它,但在我看来这是一个不好的做法.
简而言之,有没有办法同时使用REST和SOAP Web服务?
我会先尝试一个统一的,异步的guzzle设置,正如其他人所说的那样.如果这不成功,我建议不要使用进程分叉或多线程.两者都不易使用或维护.例如,混合喷嘴和螺纹需要特别注意.
我不知道你的应用程序的结构,但这可能是一个队列的好例子.将消息放入队列中以进行每个API调用,并让多个PHP守护进程从队列中读出并发出实际请求.可以将代码组织为使用curl或SoapClient,具体取决于协议或端点,而不是尝试将它们组合在一起.只需启动尽可能多的守护进程就可以并行提出请求.这避免了线程或流程管理的所有复杂性并且可以轻松扩展.
当我使用这种架构时,我还会在键值存储或数据库中跟踪"信号量".使用一系列API调用启动信号量.随着每个完成,计数减少.每个进程检查计数何时达到零,然后您知道所有工作都已完成.只有在执行后续任务时才会这样做,例如计算所有API结果中的内容或更新记录以让用户知道作业已完成.
现在,这种设置听起来比过程分叉或多线程更复杂,但每个组件都可以轻松测试,并且可以跨服务器进行扩展.
我已经整理了一个PHP库,它有助于构建我正在描述的架构.它是基本流水线操作,允许混合使用同步和异步流程.异步工作由队列和信号量处理.需要按顺序发生的API调用将分别获得一个Process
类.可以同时进行的API调用进入MultiProcess
类.A ProcessList
设置管道.
归档时间: |
|
查看次数: |
761 次 |
最近记录: |