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