我正在使用很多webservices一个庞大的php应用程序。 通常情况下,他们都会在十秒或更短的时间内向我发送数据,但有时候我会有一个没有回复并冻结所有过程的人。
所以我的问题是,如果在定义的时间后没有响应,我怎样才能在php中使用soap webservice而不冻结所有系统。
答案 0 :(得分:3)
PHP不支持多线程和异步编程。但是,您可以fork
另一个将执行此SOAP请求的进程;当然,您将无法通过此新流程向客户端发送一些数据,但您可以将将其回复写入DB。
答案 1 :(得分:2)
解决方案不一定与多线程penartur有关。唯一要做的是使用非阻塞流使用I / O多路复用,并使用select()函数作为nutrija建议。可以在此链接中找到一个已实施的解决方案:Making PHP’s SOAP client asynchronous
答案 2 :(得分:1)
您可以使用JavaScript对另一个将发出SOAP请求的PHP文件进行AJAX调用。
答案 3 :(得分:-1)
您可以使用stream_set_blocking将http / https流设置为非阻止模式。