我正在将我们的系统从 couchbase lite 1.5 升级到 2.0,但遇到了复制问题。我正在创建一个连续的推拉复制器,它在应用程序启动时提取更改,但在应用程序的整个生命周期内不会继续同步。
这是我的复制器创建代码:
public void StartSync(Uri syncEndpoint, string username, ISecureString password)
{
if (_database == null)
{
throw new DataHandlerException(DataHandlerError.DatabaseDoesntExist);
}
var endpoint = new URLEndpoint(syncEndpoint);
var config = new ReplicatorConfiguration(_database, endpoint)
{
Authenticator = new BasicAuthenticator(username, password.ToString()),
Continuous = true
};
_replicator = new Replicator(config);
_replicator.AddChangeListener((s, a) =>
{
OnSyncChange(a.Status);
});
_replicator.Start();
}
我还使用新语法设置了几个实时查询:
var token = query.AddChangeListener(OnQueryUpdated); // start live query
实时查询回调永远不会被调用,我认为这是因为复制不起作用。
有没有人遇到过这个问题或者有任何关于 Couchbase Lite 2.0 的最佳实践的例子?
更新:
我发现这个问题是由网络套接字问题引起的,这是 Couchbase 同步网关现在使用的协议。我不得不检查我的 nginx 设置并重新启动我的所有服务来纠正这个问题。
问题是需要正确配置 nginx 才能使用 2.0.0 版中同步网关使用的新 websockets 协议
设置可以在/etc/nginx/sites-available/default
文件中找到,根据同步网关文档的官方设置是:
location / {
proxy_pass http://sync_gateway;
proxy_pass_header Accept;
proxy_pass_header Server;
proxy_http_version 1.1;
keepalive_requests 1000;
keepalive_timeout 360s;
proxy_read_timeout 360s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
但是,我发现当运行 couchbase lite 的应用程序首先打开连接时,这有效,但连续复制仍然是一个问题。一种可能的解决方法是将客户端直接指向同步网关,而根本不使用 nginx。这需要更多的调查。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句