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

我正在尝试使用 Java中的couchdb(连续)更改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();

解决方法

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

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

在任何情况下,您应该期望在某个时刻关闭连接并为该条件编写代码.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...