0

我有一种情况,我希望 Java 客户端有一个带有 servlet 的双向数据通道(我可以控制两者),这样任何一个都可以开始数据传输而不必等待另一个先做某事,但是通过防火墙,这需要在 http 或 https 中进行隧道传输。

我环顾四周,但我不相信我知道询问 Google 的正确条款。

我最初是在看 http-tunneling 模块,但意识到我在另一端有一个 web 容器,我相信适当的方法是考虑一个需要与 home 通信的胖客户端。我在想 http 1.1 中的持久连接在这里可能非常有用。我可以轻松地进行心跳传输以防止连接闲置。

在这个时间点上,我只需要做一个概念证明,所以我主要需要一些现在可以工作的东西,然后可以在以后进行优化甚至替换。

因此,我很感激指向允许我建立连接的项目的指针,其中任何一方都可以将信息(如序列化对象或描述性字节流)推送到另一方。如果可能的话,我更喜欢纯 Java。


编辑:感谢您的指点。看来我需要的东西将在 servlet 3.0 规范中提供,我最终可能会长期使用它,这取决于它何时在各种 Web 容器中得到支持。

现在我正在研究 Cometd 包,它似乎能够完全满足我的原型所需。

4

5 回答 5

1

搜索词:彗星、长轮询

这些主要用于 AJAX 上下文,但我看不出为什么不能在 Java 项目中使用它们。

于 2009-09-09T09:10:49.097 回答
1

请看一下 Eclipse Net4J,

http://wiki.eclipse.org/Net4j

它支持您提到的所有功能。一个特别好的功能是它支持 HTTP 连接池,因此您可以在客户端和服务器之间有很多通道,但只使用几个 HTTP 连接。

唯一的问题是它根本没有文档。你只需要阅读源代码。一旦你弄清楚了,它就很容易使用。

在旧的 Net4J 网站上还有一些图表,

http://net4j.berlios.de/

于 2009-09-09T12:00:14.523 回答
0

通常这是通过让服务器不立即响应 http 请求来完成的。在发送响应之前,它会等待一些更新(或超时)。显然,需要注意确保服务器能够在负载下处理这个问题。

例如,参见彗星

于 2009-09-09T09:15:14.830 回答
0

它需要多快?您总是可以在客户端上进行轮询。只是经常检查新消息。

于 2009-09-09T09:08:47.383 回答
0

您可以通过 HTTP 使用Hessian协议。它是一种用于序列化数据的快速二进制协议。通常用于 Web 服务风格的 RPC 通信,但没有理由不能是 2-way - 请参阅Hessian mux。它也是纯 Java :-)

于 2009-09-09T09:09:48.427 回答