java - "delay"在使用 sun HttpServer 时传递 WebService 回复

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

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

让我举几个场景:

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

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

情况 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 个网络服务,发布在不同的上下文中。例如 2 个不同的 WSDL。客户端对每个服务都有(显然)单独的(轴 1)绑定(bind)。对于一项服务,我看到一致的延迟正好是 150 秒,而对于另一项服务,延迟一直是 300 秒。这些值(value)观是否给任何人敲响了警钟?

马丁

编辑 我现在倾向于Eclipse Generated Web Service Client Extremely Slow中的原因和解决方案。 .目前无法测试,因为我坐在旅馆房间里无法访问系统。

最佳答案

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

要使 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 协议(protocol)规范(或者可能是 Axis 的实现)中有些东西不喜欢对 HTTP/1.0 请求的 HTTP/1.1 响应。

马丁

关于java - "delay"在使用 sun HttpServer 时传递 WebService 回复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8553591/

相关文章:

java - 使用 android 从 google 应用引擎查询实体

c - 在 TCP header 中操作 ISN 号的最有效方法

android - IOS 到 Android,反之亦然 TCP 服务器客户端连接使用套接字

java - @deprecated 与 @Deprecated

ruby-on-rails - 使用 HTTParty 发送多个文件

Web 服务的 .NET 编码标准和框架

python-2.7 - scapy 中的 <Raw> 标签,如何解码内容?

java - Maven导入eclipse时不给项目添加依赖jar文件

java - 在 BigDecimal 中提取数字小数

java - Docker 外部数据库映射