CouchDB实时Ajax推送更新

时间:2011-06-30 06:23:31

标签: php jquery ajax couchdb

我正在开发一个简单的PHP应用程序,使用CouchDB和PHP-on-Couch来访问某些视图,并且它运行良好。我的下一步是引入Ajax以使用数据库中的数据更新前端。

据我所知,您可以使用_changes通知来轻松检测对数据库所做的任何更改。因此,它需要index.html监视更改(通过长轮询),调用loadView.php来更新页面内容。

首先,我希望以上是正确的方法......

其次,当浏览到index.html时,页面似乎永远不会完全加载(页面加载栏永远不会完成)。进行更改后,Firebug会按预期显示结果,但不会显示任何后续更改。此时,页面似乎已经停止了无限加载。

到目前为止,我正在使用jQuery来进行Ajax调用......

$.getJSON('http://localhost:5984/db?callback=?', function(db) {
    console.log(db.update_seq);
    $.getJSON('http://localhost:5984/db/_changes?since='+db.update_seq+'&feed=continuous&callback=?', function(changes) {
        console.log(changes);
    });
});

任何想法可能会发生在这里?

1 个答案:

答案 0 :(得分:5)

我相信答案很简单。

longpoll 查询是AJAX,保证只响应一次,例如获取HTML或图像。在等待更改时可能需要一段时间才能做出响应;或者如果已经发生变化,它可以立即回复。

连续查询是COMET。它永远不会“完成”HTTP回复,它将永远保持连接打开(错误,崩溃等除外)。每当发生变化时, zoom ,Couch都会将其发送给您。

换句话说,请尝试将feed=longpoll更改为feed=continuous,看看是否能解决问题。

对于后台,我建议change notifications上的CouchDB权威指南,当然还有优秀的Couchbase单服务器changes API documentation