KeepAlive数据包通过Soap请求

时间:2010-01-08 18:08:03

标签: php soap curl keep-alive

我一直在调试我们在同一VLAN上的两台服务器之间进行的一些Soap请求。一台服务器上的应用程序是用PHP编写的,另一台服务器上的应用程序是用Java编写的。我可以控制和更改PHP代码,但我不能影响Java服务器。 PHP应用程序使用DOMDocument对象形成XML,然后使用cURL扩展名发送请求。

当soap请求花费超过5分钟完成时,它将一直等到最大超时限制并退出并显示如下消息:

  

操作在900000毫秒后收到0字节时超时

在嗅探正在发送的数据包之后,事实证明该问题是由网络中的5分钟超时引起的,该超时正在关闭它认为过时的连接。有两种方法可以解决它:在iptables中增加超时,或者开始在请求中发送KeepAlive数据包。

要彻底,我想实施这两种解决方案。操作很容易实现超时,但发送KeepAlive数据包变得非常困难。 cURL库本身支持此功能(请参阅CLI应用程序的--keepalive-time标志),但似乎并未在PHP cURL library中实现此功能。我甚至检查了源代码,以确保它不是一个没有记录的功能。

所以我的问题是这样:我怎样才能收到这些数据包?我看到一些明确的选择,但我不喜欢它们中的任何一个:

  • 编写一个包装器,它将通过shell_exec CLI应用程序启动请求。这是一个我不喜欢的黑客
  • 更新cURL扩展程序以支持此功能。根据Ops,这是一个非选择。
  • 自己打开插座。我知道这很危险。我也没有看到用fsockopen做到这一点的方法,但我可能会遗漏一些东西。
  • 切换到另一个库。有什么支持这个?

感谢您提供的任何帮助。

0 个答案:

没有答案