【问题标题】:how to create a real-time application如何创建实时应用程序
【发布时间】:2012-02-13 04:20:31
【问题描述】:
使用 jsf2.0 和 PrimeFaces 3.0.RC2,我想制作包含我的系统请求的 <p:dataTable />,并且当一个用户持有请求时。我必须更新此请求的状态并更新所有其他用户的<p:dataTable /> 他们正在操作系统。
我怎样才能做到这一点?
假设该屏幕显示给 10 个用户,当其中一个更改状态并单击 更新 按钮时,应反映在所有用户的屏幕上。
如果有人在数据库中添加了新模型,这应该会出现。
我的意思是像电子邮件这样的例子
【问题讨论】:
标签:
java
jakarta-ee
jsf-2
primefaces
【解决方案1】:
其他用户无法被动地知道(通过 HTTP)什么时候服务器端发生了变化。您必须以某种方式主动轮询服务器并更新 UI 中的更改。您可以创建一个每 x 秒检查一次的计时器,或者在不同的浏览器事件上执行此操作(例如当用户不再使用浏览器窗口然后返回到它时)。
最好的做法是创建一个刷新按钮,这样用户只会在他们真正需要时轮询新数据,这样您就不会过度读取数据库。
【解决方案2】:
您需要寻找所谓的push、reverse_ajax 或comet 技术。 PrimeFaces 通过 servlet 实现了这项技术,但仅适用于 Jetty 服务器。查看用户指南的第 6 章。
另外,请查看cometD,这是一个成熟的项目,它以 javascript 和其他语言提供 Bayeux 协议的实现。该项目也使用 Jetty,但可以移植到其他符合 Servlet-3.0 的 servlet 容器。我在 GlassFish 服务器上运行它没有任何问题,但在客户端我有一个 dojo dataGrid 代替。您可以尝试通过Javascript集成到PrimeFaces dataTable,虽然我还没有做过,不知道这是否容易。