我有一个PHP脚本,可以在很短的时间内连续调用基于SOAP的Web服务;在0.5秒内就像200。我注意到很少,每200个请求中就有1个可能会出现连接错误或“致命协议错误”。我想知道这是否是因为我正在“锤击”这项服务。
在每个SOAP调用之间添加usleep(100);
之类的内容以减少对服务的影响,或SOAP是否具有某种内置的缓冲/排队/重试系统以便服务可以'从这个客户那里被淹没了吗?
感谢。
答案 0 :(得分:1)
SOAP协议没有特定限制,服务提供商可能会应用限制。在0.5秒内的200个请求确实相当多,并且可能导致您的一个请求由于缺少服务器资源而失败。
如果您控制服务提供商,我建议优化您的协议以减少请求 - 在每个请求中捆绑许多请求。
如果不能,您无法更改协议,您旁边的缓存机制/代理服务器可以限制请求数量。可以通过memcached,数据库甚至保存在Web服务器上临时目录中的文件来实现缓存机制。像Squid这样的代理服务器将非常乐意代理SOAP请求。
在生产环境中,来自客户端的页面请求将依赖于200个后续SOAP请求进行非常严重的扩展。我建议您考虑使用上述方法之一,尽可能地改进应用程序以减少请求。一旦尽可能地对其进行了优化,那么请考虑改进服务提供商。