2009-09-09 186 views
0

我有一种情况,我希望Java客户端有一个双向数据通道和一个servlet(我可以控制两者),这样既可以开始数据传输,无需等待其他人先做些事情,但要通过防火墙,需要使用http或https进行隧道传输。胖Java客户端需要通过http/https双向通信到Web服务器

我环顾四周,但我不相信我知道要求谷歌的正确条款。

我最初看的是http-tunneling模块,但意识到我在另一端有一个web容器,我认为合适的方法是想一个胖客户端需要与家庭进行通信。我在想,http 1.1中的持久连接在这里可能非常有用。我可以轻松地进行心跳传输以保持连接不受ide刺。

在这个时候,我只需要做一个概念验证,所以我主要需要一些现在可以运行的东西,然后可以优化甚至在以后进行替换。

所以,我很感谢指向项目的指针,这些项目允许我有一个连接,任何一方都可以将信息(如序列化对象或描述性字节流)推送到另一端。如果可能的话,我更喜欢纯Java。


编辑:感谢指针。看起来我所需要的将会在servlet 3.0规范中提供,我可能最终会根据它在各种Web容器中的支持时间长期使用它。

现在我正在研究Cometd软件包,它似乎能够完成我原型所需的工作。

回答

1

搜索词:彗星,长轮询

这些大多是在AJAX环境中使用,但我看不出有任何理由,你为什么不能在一个Java项目中使用它们。

0

它需要多快?你总是可以对客户端进行轮询。每隔一段时间检查一次新邮件。

0

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

0

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

例如,参见Comet

1

请看看Eclipse的Net4J,

http://wiki.eclipse.org/Net4j

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

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

上有老Net4J现场多了一些图表,

http://net4j.berlios.de/

相关问题