虽然我熟悉 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 Tomcat和Eclipse Jetty等 Servlet 容器一直在迭代许多版本,以修复和改进 WebSocket。请务必更新到更高版本。Vaadin 也是如此,许多迭代都包括对 WebSocket 的修复,目前是7.5.8。