我从一些Web服务获取信息,但我希望我所调用的方法只是异步,因为请求花费的时间太长,以至于网站加载缓慢.
我目前正在使用普通的SOAP调用
$client = new SoapClient("http://xxxx.com/webservices/json.asmx?WSDL");
$result = $client->__soapCall($id, $parameters);
有谁可以帮助我吗
最佳答案 这种方法通常不是服务器端的异步策略,因为这不符合php的工作方式.而是应用此策略:
您处理请求并将html页面响应给具有容器元素的客户端,其中缓慢的API调用的结果将转移到该客户端.但容器是空的或包含占位符.此外,还提供了一个客户端逻辑,即javascript,它将处理程序注册到客户端的文档就绪事件.在该处理程序内部,它将ajax请求返回给服务器,通常每个API调用必须执行一个请求.在ajax请求中接收的有效负载用于使用最终数据填充html内的容器.
这样,页面/视图本身的生成和呈现与完全等待API调用分离.此外,该策略是透明的,用户可以看到提取的附加数据使得等待时间从心理学的角度来看更容易接受.
您可以想到该策略的一种变体,它已经注册了基于服务器的作业,执行实际的API调用并缓冲结果.这样你就可以保持往返发送页面并等待ajax调用进入的延迟缓慢.但是这里的挑战是保持这些作业与原始请求之间的连接以及随后的ajax调用一个简单的任务.通常,该优点根本不能证明额外的努力.
因此,作为底线,可以说通常在纯PHP中没有实现异步策略.相反,原始请求被分成几个单独的请求.只处理第一个请求并立即响应,与任何慢速API调用无关.然后,并行地,ajax请求触发API调用并将结果信息添加到对第一个请求的响应中.