Couchbase Lite 2.0复制

时间:2018-04-25 15:29:03

标签: c# replication couchbase-lite

我正在将系统从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设置并重新启动我的所有服务以更正此问题。

1 个答案:

答案 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。这需要更多的调查。