使用sun HttpServer时提供WebService回复的“延迟”

时间:2011-12-18 17:57:17

标签: java web-services tcp delay com.sun.net.httpserver

我正在编写一个实现Web服务的独立应用程序,使用嵌入式Sun HttpServer为其发布Endpoint。我有一个奇怪的问题,在特定的部署情况下,服务器处理/发送回复和客户端接收回复之间存在明显的延迟。 / p>

让我举几个场景:

案例1)工作:服务器在Eclipse中运行,它使用OpenJDK 1.6.0_23作为运行时。客户端是用axis(而不是axis2!)实现的,并且在JBoss内的Solaris x86上运行(必须承认我不知道使用的确切Java版本,但我怀疑是Java 5版本。)

案例2)工作:服务器在带有java 1.6.0_26的Solaris x86上运行,客户端在Eclipse中运行,带有OpenJDK 1.6.0_23。

案例3)不工作:服务器在Solaris x86上使用java 1.6.0_26运行,客户端在Solaris x86上,轴在Solaris x86上(再次,怀疑它是Java 5,而不是6)。

我想知道我是否会遇到以下Java错误,这个错误在1.6.0_30中得到修复(假设OpenJDK 1.6.0_xx没有遭受同样的错误)?

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7068416

但如果是这样的话,为什么案例2会起作用呢? 客户端可以某种方式控制服务器端的TCP_NODELAY吗?

关于我观察到的确切延迟:我有2个Web服务,在不同的上下文中发布。例如2个不同的WSDL。客户端(显然)为每个服务分离(轴1)绑定。对于一项服务,我看到恰好150秒的一致延迟,对于其他服务,延迟始终为300秒。这些价值观会给任何人敲响一声吗?

马腾

修改 我现在倾向于Eclipse Generated Web Service Client Extremely Slow中的原因和解决方案。当我坐在酒店房间而无法访问系统时,无法进行测试。

1 个答案:

答案 0 :(得分:0)

好的,设法通过告诉Axis使用CommonsHttpSender而不是默认的HttpSender来解决这个问题。由于相关应用程序已经在其WEB-INF / lib目录中具有必备的先决条件罐,因此这不是什么大问题。

要让Axis(1.4)使用CommonsHttpSender,请在以下位置创建一个“client-config.wsdd”文件(注意:这是一个非常明显的部分,这让我感到非常头痛):

MY.ear/MY.war/WEB-INF/classes/org/apache/axis/client/client-config.wsdd

具有以下内容:

<?xml version="1.0" encoding="UTF-8"?> 
<deployment 
    name="commonsHTTPConfig" 
    xmlns="http://xml.apache.org/axis/wsdd/" 
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

   <!-- use CommonsHTTPSender instead of the default HTTPSender -->
  <transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />  

  <transport name="local" pivot = "java:org.apache.axis.transport.local.LocalSender" /> 
  <transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender" /> 
</deployment>

重新启动您的应用程序。在此更改之后,Axis将使用HTTP / 1.1进行Web服务调用,这似乎是纠正这种令人讨厌的延迟所需的全部内容。似乎HTTP协议规范(或者可能是Axis的实现)中存在 something ,它们不喜欢对HTTP / 1.0请求的HTTP / 1.1响应。

马腾