使用savon处理简单的肥皂请求需要5秒

时间:2016-09-20 07:03:38

标签: ruby-on-rails wsdl savon

目标是连接到第三方SOUP API提供商。他们提供了WSDL定义。

我想到的第一件事是使用Savon宝石。所以我实现了它,直截了当的方式,如下所示:

client = Savon.client do
    wsdl http://url_to_wsdl/
end

response = client.call(:some_supported_action) do
    message message
end

响应正确返回。但我注意到它是在10秒后。所以,像往常一样,我先责怪服务器。所以我在两端进行数据包捕获。并且wiresharks结果显示服务器响应时间<200ms。

然后我做了一些研究,有些人说远程WSDL可能需要一些时间才能被Savon下载。所以我修改了代码以使用本地版本:

client = Savon.client do
    wsdl Rails.root.join('config', 'local.xml')
end

现在,我需要将响应时间缩短到5.x秒。也许这是萨翁一次召唤的结果。但它仍然很慢。

接下来,我还读到解析WSDL可能很慢。所以我完全摆脱了WSDL。

client = Savon.client do
    endpoint 'my_endpoint'
    namespace 'my_namespace'
    element_form_default :qualified
end
response = client.call('MethodName',
               soap_action: 'SoupActionName',
               message: message)

如果没有wsdl解析,响应仍需要5秒。进一步检查WireShark日志,我注意到传出的数据包只在调用client.call后大约5秒发送。

最后,我转而使用&#39; http&#39;而不是&#39; net_http&#39;作为HTTP客户端。也没有什么不同。还是5-6秒。

HTTPI POST request to my_url.com (http)
HTTPI POST request to my_url.com (net_http)

其他信息:

  1. 我正在使用savon 2.11和rails 4.2.7
  2. 如果我使用测试工具,例如Boomerang Chrome App,它会显示来自服务器的快速响应,这与数据包捕获结果相匹配。因此很可能是Savon内部处理特有的东西。
  3. 任何人都知道为什么会发生这种情况以及如何解决这个问题?

0 个答案:

没有答案