我想看看在Vaadin 7中使用新Push technology的最小例子,例如新的@Push
注释。
我在使用server-push在我的应用中工作时遇到问题。在尝试修复自己的应用之前,我想尝试一个简单的示例应用。
答案 0 :(得分:24)
Book Of Vaadin包含有关推送的章节,包括使用Vaadin Charts的示例。
以下是我的代码。虽然基于上面提到的Vaadin Charts示例,但我通过将Chart
对象替换为简单的Label
对象来简化它。标签每秒钟更新一次,以告诉您当前时间。
警告:我的示例是为了简单起见而构建的, 并非用作生产代码 。睡眠线程是管理预定线程工作的原始和笨拙方式。 Java为这种工作提供了Executor
工具。在实际项目中,我将使用ScheduledExecutorService而不是单个睡眠Thread
对象来安排我们的任务(告知时间)。相关提示:切勿在Servlet环境中使用Timer
。有关更全面,更真实的示例,请参阅my Answer,了解有关推送Vaadin的类似问题。
我在此示例中使用了其他快捷方式,例如:我将Label
小部件直接放在UI
上,而实际工作则使用Layout
来包含{{1} }}。
我的代码在NetBeans 8.0.2中使用Vaadin 7.3.7和Java 8 Update 25,在Mac OS X 10.8.5(Mountain Lion)上使用Tomcat 8.0.15。
Push技术相对较新,特别是WebSocket种类。请务必使用最新版本的Web服务器,例如Tomcat 7或8的最新更新。
此代码是单个文件,Label
文件。要使用此代码:
MyUI.java
类的内容。MyUI
注释除了中间的代码,请注意我们如何将@Push
注释添加到@Push
类定义中。
MyUI
答案 1 :(得分:1)
Here是一个简单但完整的Vaadin 8示例,演示了如何使用服务器推送和Java EE消息传递API,使用Broadcaster pattern中描述的Vaadin docs在不同的UI之间发送消息。如果您对向其他用户发送消息或广播不感兴趣,请仅查看ReceiveMessageUI。
原则上,这一切归结为以下几点:
@Push
注释Vaadin UI以启用服务器推送(默认情况下通过WebSocket连接)从其他线程访问UI时更新access()
的UI更新,默认情况下会自动发送更新:
getUI().access(() -> layout.addComponent(new Label("Hello!")));
使用Broadcaster pattern向其他用户发布消息并订阅他们的消息。