首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在等待数据库更新时使用超时的Websockets或ajax?

问在等待数据库更新时使用超时的Websockets或ajax?
EN

Stack Overflow用户
提问于 2015-03-31 21:48:46
回答 2查看 166关注 0票数 0

当任何事件发生时,通过在数据库中添加一个条目,我的应用程序就会更新。这是通过一个独立的代码异步完成的。

现在,使用PlayFramework(Java),我想向客户机显示事件,按时间倒序排列(最新的在前)。

我最初考虑使用前端将连接到的websocket,但这需要服务器每隔n分钟查询数据库以检查新条目,如果存在则返回它们。

我开始怀疑使用setInterval发出ajax请求是不是一个更好/更简单的选择(考虑到同样的想法:查询api以询问从date = {last query time}开始的最新事件)。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2015-04-01 23:35:46

我认为,如果可能的话,你最好考虑让它成为事件驱动的,而不是考虑到性能和体系结构的周期性查询。第一件事是使用DBMS触发器(AFAIK,一些DBMS通过触发器提供执行web服务的触发器,但我不确定它是否需要)或原始应用程序的侦听器,如@PostPersist (如果它在同一Java进程上,您可以利用一些静态的或DI驱动的侦听器),根据数据库的变化通知应用程序服务器。如果不是,可以执行HTTP请求)。

现在您正在监听数据库的更改,您需要一种方法来通知感兴趣的客户端该更改。您可以选择任何称为WebSocket或Comet的技术来实现这一点。然而,在我看来,最简单的选择是采用制作良好的框架来使用这种用法。因为我是Cettia的作者,所以我给你一个用Cettia写的例子,但你也可以用atmosphere-play这样的其他项目做同样的事情。

代码语言:javascript
复制
// Assumes you are notified of database changes through this listener
// However, it doesn't matter
public class SomeEntityListener {
    // Assumes you are using Dependency Injection framework like Spring or CDI
    // so you can inject io.cettia.Server to anywhere you want to handle clients
    @Inject
    Server server;

    // This method is called after persisting of some entity
    @PostPersist
    public void postPersist(SomeEntity e) { 
        // Broadcasts just a persisted entity to interested clients
        // No matter how you are notified of database event, only this line is necessary
        server.byTag("someentity-subscribers-postpersist", e);
    }
}

有关如何安装Cettia,请参阅this quick start guide和a working example for Play。当然,你可以用vanilla WebSocket做到这一点,但它不是灵丹妙药。(这就是为什么在不同的语言和平台上出现了这么多框架)

票数 1
EN

Stack Overflow用户

发布于 2015-04-06 18:32:36

是的,您的第一个选择更好,因为它不需要每n分钟轮询一次,因为您的应用程序运行在一个服务器上,该服务器可以使用一些在数据库更新时触发的API来通知。

Websocket将在浏览器和播放应用程序之间创建一个通道,该通道由两个通道组成,一个用于入站,一个用于出站。在创建websocket的后端播放应用程序中,我们可以将事件侦听器附加到入站通道,该事件侦听器将根据从浏览器端接收到的入站通道中的数据触发回调。

因此我们可以创建一个在更新时从数据库触发API,该API将在websocket的出站通道上写入数据。

使用此方法将帮助您删除对数据库的大量轮询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29370158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档