我正在开发一个带有PouchDB的Ionic应用程序,需要将表与远程CouchDB服务器同步。 在我的database.ts提供程序的构造函数中,我有6个方法:
this.initialiseDB_Ord();
this.initialiseDB_IngProd();
this.initialiseDB_Ing();
this.initialiseDB_Prod();
this.initialiseDB_OrdProd();
this.initialiseDB_Ut();
这些方法中的每一个都执行以下操作(我选择第一个作为示例):
this._DB_Ord = new PouchDB('orders');
this._remoteDB_Ord = this.addressIP + '/orders';
this._syncOpts_Ord = { live : true,
retry : true,
continuous : true};
this._DB_Ord.sync(this._remoteDB_Ord, this._syncOpts_Ord)
.on('change',(info) => {
console.log('Handling syncing change');
console.dir(info);
}).on('paused',(info)=> {
console.log('Handling syncing pause');
console.dir(info);
}).on('active', (info) => {
console.log('Handling syncing resumption');
console.dir(info);
}).on('denied', (err) =>{
console.log('Handling syncing denied');
console.dir(err);
}).on('complete', (info) =>{
console.log('Handling syncing complete');
console.dir(info);
}).on('error', (err)=>{
console.log('Handling syncing error');
console.dir(err);
});
然后我有一个handleSyncing方法如下:
handleSyncingUt() {
this._DB_Ut.changes({
since : 'now',
live : true,
include_docs : true,
attachments : true
})
.on('change', (change) =>
{
console.log('Handling change');
console.dir(change);
})
.on('complete', (info) =>
{
console.log('Changes complete');
console.dir(info);
})
.on('error', (err) =>
{
console.log('Changes error');
console.log(err);
});
}
如果我有最多5个数据库,它可以正常工作。 添加第六个数据库后,它不会实时同步本地pouchDB和远程couchDB,但只有在首次打开应用程序时才会同步。
有人可以帮助我吗?
答案 0 :(得分:2)
浏览器的最大页数为sockets per domain和每页,并且您通过live:true
连接超过了它。 Chrome分享了标签之间的第一个限制,因此您可以验证更少连接的多个标签导致Chrome中的问题,或者通过提高firefox的about:config
中的限制。
您无法为普通用户真正修复此限制,并且需要调整管理连接的方式(例如worker可以管理Chrome中许多标签的一个数据库同步)和数据设计可能会被更改为仅观察一个"更改" db经常知道何时在其他dbs上运行live:false
次传递。
答案 1 :(得分:2)
@lossleader是关于浏览器/ WebView中最大连接数的钱。在Quizster,我们遇到同样的问题,因为Quizster必须同时同步多达10个PouchDB实例。这是使用Howler来订阅一组数据库的更改。在更改其中一个数据库后,Quizster会在PouchDB实例和CouchDB集群之间发出一次性(非实时)同步。
更多背景知识:Quizster必须将这多个PouchDB实例同步为:
我计划很快开源更多的Quizster堆栈,并希望发布一些教程。