gpt4 book ai didi

Java HTTP 全双工

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:49 25 4
gpt4 key购买 nike

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

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

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

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

更新:

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

最佳答案

你不应该在从 InputStream 读取后写入更多数据因为这不符合 HTTP 协议(protocol) 的性质,即请求-响应。查看更多信息 here .

关于Java HTTP 全双工,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8259940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com