2

我一直在开发一个通过 SOAP 获取所有数据的网站。某些页面可能对soap 服务器进行了三到四次调用,并且某些调用有时可能需要很长时间(30-60 秒)。

我注意到发生的事情是,如果我在一个 30 秒的长调用期间中断请求(停止浏览器加载)并向不需要很长时间的调用发出另一个请求(使用较短的调用加载另一个 URL)我不在初始呼叫的 30 秒结束之前(或者看起来如此),不会收到请求。

这里到底发生了什么,有办法解决吗?
这是 pcntl 可以帮助减轻的吗?
此外,我希望通过 Nginx 使用 FPM 设置 PHP。这会影响事情吗?

谢谢大家!

4

2 回答 2

0

我怀疑如果你在两端嗅探流量(例如使用wireshark),那么答案可能会更清楚。

我的猜测是客户端或服务器正在尝试进行非常慢的 DNS 查找。对于不存在的记录,通常会发生非常慢的 DNS 查找 - 由于请求正在登陆服务器,这意味着失败的 DNS 查找是由服务器在客户端 IP 地址上完成的。

于 2010-09-20T11:31:15.667 回答
0

(我想)我也遇到过类似的问题。我正在使用 SOAP 从 Java 服务器接收 PHP 端的请求(这是发送请求)。

给你一个问题,你必须发回一个 ACK​​(确认)响应吗?如果是,我认为您的请求正在超时。

这是发生在我身上的事情:

在 Java 端,它希望在 30 秒内收到 ACK 响应,否则会发生错误并重新发送请求。

在 PHP 方面,即使我一收到 SOAP 请求就发送了 ACK 响应,PHP 直到脚本执行结束才会发送它。这是因为 PHP 是单线程语言。

我为解决这个问题所做的是接受 SOAP 请求,将其解析到数据库中并发回 ACK 响应。然后启动另一个脚本(守护进程)来处理 SOAP 请求。解决我的问题是一个技巧。

希望这可能会对您的问题有所了解。

顺便说一句,这是针对 Salesforce(事物的 Java 方面)和他们的 PHP 工具包(API)

于 2010-09-20T14:54:42.813 回答