如何使用CouchDB更改通知从Java进行连续更改?

如何使用CouchDB更改通知从Java进行连续更改?,couchdb,Couchdb,我试图使用Java中的couchdb(continuous)changes API,发现在用尽当前更改列表之后,流似乎关闭了,而不是像预期的那样永远保持打开状态 下面是我正在使用的代码。我希望永远不会退出while循环,但只要当前已有的更改完成流式传输,就会退出。我对couchdb和Java都比较陌生,所以可能缺少一些明显的东西。有人能告诉我怎么正确地写吗 URL url = new URL("[path to database here]/_changes?feed=continuous";)

我试图使用Java中的couchdb(continuous)changes API,发现在用尽当前更改列表之后,流似乎关闭了,而不是像预期的那样永远保持打开状态

下面是我正在使用的代码。我希望永远不会退出while循环,但只要当前已有的更改完成流式传输,就会退出。我对couchdb和Java都比较陌生,所以可能缺少一些明显的东西。有人能告诉我怎么正确地写吗

URL url = new URL("[path to database here]/_changes?feed=continuous";);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true); 
conn.setUseCaches(false); 
conn.setRequestProperty("Connection", "Keep-Alive"); 
conn.setRequestMethod("GET");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while((line = reader.readLine()) != null){
    // do something with the line here
}
// Should never get here under normal circumstances
reader.close();

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


只是想一想。

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


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

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

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

在任何情况下,您都可能希望连接在某个点关闭,并为该条件编写代码