【问题标题】:Strange timeout behaviour using php soap client使用 php soap 客户端的奇怪超时行为
【发布时间】:2012-02-29 17:23:29
【问题描述】:

我正在尝试制作一个类似代理的页面,将 AJAX 请求转发到 SOAP 服务器。 浏览器每 10 秒向同一页面(即具有不同查询字符串的 server.php)发送 2 个请求。 服务器根据查询字符串对soap 服务器进行soap 调用。 一切正常。

然后我在soap服务器中设置了一个睡眠(40秒)来模拟一个缓慢的响应,我还在调用者设置了一个超时以在几秒钟后中止调用。

server.php: Pseudo code:

$timeout = 10;
ini_set("default_socket_timeout", $timeout);

$id = $_GET['id'];

$wsdl= 'http://soapserver/wsdl'
$client = new SoapClient($wsdl,array('connection_timeout'=> $timeout));
print($client->getQuote($id));

如果浏览器向http://myserver/server.php?id=IBM发送ajax请求 请求在我设置的超时后停止。 如果我尝试在第一次停止之前拨打第二次电话,则第二次电话不遵守超时。

i.e.

Request:

GET http://myserver/server.php?id=IBM 
and after 1 second 
GET http://myserver/server.php?id=AAP

Response:

after 10 seconds:
No data
after 20 seconds:
No data

我也尝试不使用 PHP SOAP 而是使用 curl,但我得到了相同的结果。

我还尝试在浏览器上打开 3 个标签并调用:

http://myserver/server.php?id=IBM
http://myserver/server.php?id=AAP
http://myserver/server.php?id=MSX

第一个在 10 秒后停止,第二个在 20 秒后停止,第三个在 30 秒后停止。

这是正常行为还是我错过了什么? 提前致谢

【问题讨论】:

    标签: php soap curl


    【解决方案1】:

    您可能正在启动会话,并且session_start() 阻止对它的第二次调用,直到另一个请求“释放”会话(换句话说:已经完成并且不会再向会话写入任何数据)。对于耗时的请求,如果不需要,请不要启动会话,如果确实需要,请获取所需的所有数据,然后在执行耗时的操作之前致电session_write_close()。如果您之后需要写信给会话,只需再次致电session_start()

    【讨论】:

      猜你喜欢
      • 2020-08-09
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 2012-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多