2009-10-28 60 views
6

我正尝试使用来自Java的couchdb(连续)更改API,并发现在耗尽当前更改列表后,流似乎已关闭,而不是保持打开状态,因为它应该是这样。如何使用CouchDB变更通知从Java持续更改?

我使用的代码如下。我希望永远不会从while循环中退出,但只要当前存在的更改完成流式处理即可。我对couchdb和Java都比较陌生,所以可能会漏掉一些明显的东西。任何人都可以告诉我如何正确写入?

​​

回答

7

除非提供不同的超时值或心跳,否则实际上会有60000ms(60秒)的默认超时。我在10月份更新了_changes wiki page,并包含了我在代码中遇到的任何默认值。

设置心跳基本上意味着您将在客户端观察超时,即心跳周期没有换行意味着您肯定已经失去了连接。我相信如果有心跳,CouchDB会禁用超时检查。

在任何情况下,您都应该期望连接在某个时间点被关闭,并且代码为该条件。

0

这只是一个猜测,因为我对couchdb的连续执行或HttpUrlConnection实现不够了解。但似乎禁止两者的代码中的任何错误,如果您的java连接客户端的超时设置低于couchdb连续更改的默认心跳,那么连接可能会被java客户端终止。

只是一个想法。

3

您可以使用&heartbeat=1000让couchdb每秒通过电线发送新的线路。这将保持您的连接打开,直到断开连接和/或CouchDB关闭。

但是你是对的,我也会期望连接不会关闭 - 好像conn.setReadTimeout(0);也没有任何帮助。

+0

我在这里打开了一个缺陷:https://issues.apache.org/jira/browse/COUCHDB-580 – Joscha 2009-11-26 11:48:22