Vaadin 7带有websockets

edd*_*okr 2 java atmosphere vaadin7

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

我正在寻找一种方法在我的应用程序中实现websockets来执行一些非常具体的任务.该任务在下图中以图形方式说明:

Vaadin应用程序设计

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

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

我完成了我的作业,我发现气氛框架(也在Vaadin中使用)是一个非常接近的选手.但这些示例涉及JavaScript客户端而不是Java客户端.

Bas*_*que 5

虽然我熟悉Vaadin 6和7,但我不是WebSocket的专家.所以,我要用一粒盐说些什么.但是这里......

(a)您的图纸表明您专注于客户端(浏览器)方面.你可能需要改变思路.Vaadin的主要观点是应用程序实际上在服务器上运行.虽然我们在概念上认为我们的应用程序在用户面前运行,但我们知道应用程序的状态和执行实际上存在于服务器上.我们通常不会考虑Web浏览器内部的内容.

这就是使Vaadin如此特别的原因,而不是许多另一个网络框架项目中的一个.据我所知,Vaadin在这方面几乎是独一无二的.与像Vaadin服务器端,执行架构唯一的其他Web应用程序套件的(非Java)Xojo Web版(原名为皇家工作室).

(b)似乎你真正想要的是"推",而不关心自己的WebSocket细节.解释…

对用户做出反应

通常,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担心是否应该使用带有大气层的WebSockets或其他一些技术.

阅读The Book of Vaadin中Server Push章节.这可能是您开始使用的全部内容.


作为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çoisArcand)是Atmosphere框架的创造者!

更新2015-10:Apache TomcatEclipse Jetty等Servlet容器一直在迭代许多版本,以便对WebSocket进行修复和改进.请务必更新到更高版本.同样适用于Vaadin,许多迭代包括对WebSocket的修复,目前为 7.5.8.