Java HTTP全双工

时间:2011-11-24 16:18:28

标签: java http post jax-rs httpurlconnection

我在Jersey上运行RESTful Web服务(GlassFish 3.1.1)。这个有点不寻常 - 它使用HTTP流。客户端和服务器有一个长时间运行的对话,在这些对话中,他们不断发送编码为XML标签的消息。这样做的主要原因是服务器可以推送到客户端。

我有一个使用HttpURLConnection的测试客户端。问题是客户端的OutputStream或服务器的InputStream过早关闭。当我尝试从客户端发送一些XML时,我得到ProtocolException抛出(读取输入后无法写入输出)。

当我使用WizTools RESTClient进行测试时,我可以发布XML请求,但此工具不允许保持连接活动。但至少我知道Web服务至少在这种情况下正在运行。 (在流媒体场景中可能还不错;我的猜测是HttpURLConnection让我失望。

有没有办法让HttpURLConnection保持活着并让我有机会实际向OutputStream发送内容?而且,最重要的是,即使在通过OutputStream收到数据后,有没有办法让它继续写入InputStream

更新

看起来HttpURLConnection正在强制执行HTTP的传统用法,即客户端在完全发送请求(并关闭输出流)之前无法处理响应。是否存在允许请求和响应暂时重叠的替代方案?我刚刚开始查看Apache HttpClient,但我还没有找到任何表明它可能的东西,所以我不确定我是否在浪费时间。

1 个答案:

答案 0 :(得分:3)

InputStream读取后,您不应该写更多数据,因为这不符合 HTTP协议的性质,即请求 - 响应。详细了解here