我正在将系统从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的最佳实践示例?
更新:
我发现此问题是由Web套接字问题引起的,这是Couchbase同步网关现在使用的协议。我必须检查我的nginx设置并重新启动我的所有服务以更正此问题。
答案 0 :(得分:1)
问题是需要正确配置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。这需要更多的调查。