Vaadin 7带有websockets

时间:2013-11-22 06:30:32

标签: java atmosphere vaadin7

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

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

Vaadin application design

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

  1. 我应该使用哪个框架来创建websocket服务器和客户端?
  2. 是否有可以与vaadin集成的氛围java客户端?
  3. 我可以使用Vaadin的推送框架来解决这个问题吗?
  4. 我完成了我的作业,我发现气氛框架(也在Vaadin中使用)是一个非常接近的选手。但这些示例涉及JavaScript客户端而不是Java客户端。

2 个答案:

答案 0 :(得分:5)

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

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

这使得Vaadin如此特别,而不是众多又 - 另一个 - web-framework 项目中的一个。据我所知,Vaadin在这方面几乎是独一无二的。唯一一个具有服务器端执行架构(如Vaadin)的Web应用程序套件是(非Java)Xojo,Web版(以前称为Real Studio)。

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

对用户做出反应

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

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

请注意,我们作为Vaadin程序员并不关心上面场景中刚刚发生的来回细节。浏览器 - 服务器交互可能已经通过HTTP请求响应,长轮询或WebSocket执行,或者谁知道所有内容。我们不在乎。 Vaadin 7.1碰巧使用Atmosphere framework作为其实施的一部分并不是(通常)我们关注的任何问题。这是Vaadin的力量和特殊区别。

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

可能正在向用户显示的报告中的数据正在发生变化。程序员可能希望她的应用程序如此灵活,以便自动更新报告,而无需用户点击更新按钮。此行为称为“推送”,如推送更新到用户屏幕。 Vaadin博客文章Roadmap for the next 74 days解释说,Vaadin 7.1的一项重大创新是支持推动。

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

专注于推送

因此,WebSockets是获取推送的一种方式,但不是唯一的方式。将注意力集中在“推动”功能上。让Vaadin担心是否应该使用带有大气层的WebSockets或其他一些技术。

阅读Server Push中的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 Jettysupports WebSocket。 Jetty与Tomcat密切相关,两者的效果都很好(尽管我不能说出他们的WebSocket功能)。

Other Servlet containers可能会为WebSocket提供支持。

更新the answer注意jfarcand。我只是注意到他(Jean-FrançoisArcand)是the Atmosphere framework的创造者!

更新2015-10: Servlet容器,例如Apache Tomcat& Eclipse Jetty已经为WebSocket的修复和改进迭代了许多版本。请务必更新到更高版本。同样适用于Vaadin,许多迭代包括对WebSocket的修复,currently 7.5.8。

答案 1 :(得分:2)

回答你的问题:

  

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

我建议您使用引擎盖下使用Atmosphere的Vaadin 7.1.x.您也可以直接使用Atmosphere,但我必须说与Vaadin的整合非常好。氛围随处可见支持websockets:Vert.x,Play! Servlet和Netty。

  
    
      

是否有可以与vaadin集成的氛围java客户端?

    
  

是的,请参阅wAsync

  
    

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