2

我有一个 vaadin 7.1.4 Web 应用程序,它以各种 UI 结构(表、树)显示后端数据。它处理大量数据,因此它是多线程的。它目前在 Tomcat 6 服务器中运行。

我正在寻找一种在我的应用程序中实现 websocket 以执行一些非常具体的任务的方法。下图以图形方式解释了该任务:

Vaadin 应用程序设计

我正在寻找一种方法来做到这一点。请帮我解决以下问题:

  1. 我应该使用哪个框架来创建 websocket 服务器和客户端?
  2. 有没有可以和vaadin集成的大气java客户端?
  3. 我可以使用 Vaadin 的推送框架来解决这个问题吗?

我做了功课,我发现气氛框架(也用于 Vaadin)是一个密切的竞争者。但是这些示例处理的是 JavaScript 客户端而不是 Java 客户端。

4

2 回答 2

5

虽然我熟悉 Vaadin 6 和 7,但我不是 WebSocket 方面的专家。因此,请接受我要说的一粒盐。但是这里……</p>

(a) 您的绘图表明您关注客户端(浏览器)方面。你可能需要改变你的想法。Vaadin 的要点是应用程序实际上是在服务器上运行的。虽然我们在概念上认为我们的应用程序在用户面前运行,但我们知道应用程序的状态和执行实际上是在服务器上运行的。我们通常不会考虑 Web 浏览器内部实际发生的事情。

这就是让 Vaadin 如此特别的原因,而不是众多又一个网络框架项目之一。据我所知,Vaadin 在这方面几乎是独一无二的。唯一一个像 Vaadin 一样具有服务器端执行架构的其他 Web 应用程序工具包是(非 Java)Xojo,Web 版(以前称为 Real Studio)。

(b) 似乎您真正想要的称为“推送”,而不关心 WebSocket 细节。解释一下……</p>

对用户做出反应

通常,Vaadin 应用程序会等待响应用户的操作,例如输入字段或单击按钮。

例如,当用户单击浏览器中的按钮时,安装在浏览器端的 Vaadin 框架会自动通知在服务器上运行的 Vaadin 应用程序该用户的操作。然后,服务器端应用程序运行一些附加到按钮的代码。该纯 Java 代码正在服务器上运行。假设按钮更新字段中的文本。当您的服务器端代码更新文本值时,Vaadin 服务器端框架会自动通知浏览器端 Vaadin 框架新值。新值会自动出现在屏幕上供用户查看。

请注意,作为 Vaadin 程序员,我们并不关心上述场景中刚刚发生的来回的细节。浏览器-服务器交互可能是通过 HTTP 请求-响应、长轮询、WebSocket 或谁知道什么来执行的。我们不在乎。Vaadin 7.1 恰好使用Atmosphere 框架作为其实现的一部分(通常)不是我们所关心的。这就是 Vaadin 的力量和特殊区别。

有时程序员想要更新用户看到的显示而不等待用户采取行动。

可能在报告中显示给用户的数据正在发生变化。程序员可能希望她的应用程序能够自动更新报告,而无需用户费心点击更新按钮。这种行为称为“推送”,就像更新推送到用户屏幕一样。Vaadin 博客文章“未来 74 天路线图”解释说,Vaadin 7.1 的一项重大创新是支持推送。

在 Vaadin 6 中,一些人使用附加组件(插件)来获得一些推送功能。但鉴于 Vaadin 6 的架构并未考虑到这一点,因此存在局限性。

专注于推送

所以,WebSockets 是获得推送的一种方式,但不是唯一的方式。将注意力集中在“推送”功能上。让 Vaadin 担心它是否应该使用带有 Atmosphere 的 WebSockets 或其他一些当前的技术。

阅读The Book of Vaadin中的服务器推送章节。这可能就是您开始所需的全部内容。


作为 Vaadin 程序员,您不必关心 WebSocket。但是作为系统管理员,您应该对 WebSocket 感到非常兴奋。这项技术有望极大地提高应用程序的速度、响应能力和稳健性。警告:这项技术是新技术,所以我们还不知道它在现实世界中的表现如何。鉴于承诺和 Vaadin 7.1 的可用性,您可能希望启用具有 WebSocket 支持的Servlet容器。

JSR-356 Java WebSocket今年(2013 年)为IETF rfc 6455定义的 WebSocket 协议定义了标准接口。

Apache Tomcat 8创新了该 JSR 的实现。该实现已向后移植到Tomcat 7.0.47,弃用了 Apache Tomcat 专有的 WebSocket API,转而支持新的 JSR-356 实现。Tomcat 8 处于候选发布阶段,因此您可能想尝试一下,尽管我不知道什么最适合 Vaadin 7.1。

Eclipse Jetty支持 WebSocket。Jetty 与 Tomcat 相近,两者总体上都运行良好(尽管我无法谈论它们的 WebSocket 功能)。

其他 Servlet 容器可能会提供对 WebSocket 的支持。

更新:注意jfarcand回答。我刚刚注意到他(Jean‑François Arcand)是Atmosphere 框架的创建者!

2015-10 更新:Apache TomcatEclipse Jetty等 Servlet 容器一直在迭代许多版本,以修复和改进 WebSocket。请务必更新到更高版本。Vaadin 也是如此,许多迭代都包括对 WebSocket 的修复,目前是7.5.8。

于 2013-11-22T07:55:15.357 回答
2

回答你的问题:

我应该使用哪个框架来创建 websocket 服务器和客户端?

我建议您使用 Vaadin 7.1.x,它在引擎盖下使用 Atmosphere。您也可以直接使用 Atmosphere,但我必须说与 Vaadin 的集成非常好。Atmosphere 在任何支持 websockets 的地方运行:Vert.x,Play!Servlet 和 Netty。

有没有可以和vaadin集成的大气java客户端?

是的,请参阅wAsync

我可以使用 Vaadin 的推送框架来解决这个问题吗?

是的

于 2013-11-22T15:54:08.173 回答