Couchbase Lite 2.0 复制

Couchbase Lite 2.0 Replication

我正在将我们的系统从 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。这需要更多调查。