我在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,但我还没有找到任何表明它可能的东西,所以我不确定我是否在浪费时间。