0

我一直在编写 Neo4j 服务器扩展(如此处所述,即托管服务器扩展:http ://docs.neo4j.org/chunked/stable/server-plugins.html )。它应该只通过 POST 获取一个字符串(在生产力中它会保存扩展应该处理的信息,但这在这里不再需要关注)。它尝试了 Neo4j 1.8.2 和 1.9.RC2 的扩展,结果是一样的。

现在我的问题是,有时这个扩展会做很多工作,可能需要几分钟。但是,恰好在 200 秒后,连接就会丢失。我不确定发生了什么,但似乎服务器正在断开连接。

为了验证这种行为,我编写了一个新的、几乎是空的服务器扩展,它只等待 5 分钟(通过 Thread.sleep())。从测试客户端类,我发布了一些虚拟数据。我使用 Jersey、Apache HTTPcomponents 和纯 Java URL 连接进行了测试。Jersey 和普通 Java 在 200 秒后重试,HTTP 组件抛出“org.apache.http.NoHttpResponseException: The target server failed to respond”。

我认为这是一个服务器问题,首先是因为在这种情况下异常似乎代表了这一点(在 httpcomponent 的代码中有一条评论说),其次是因为当我将连接超时和/或套接字超时设置为低于 200 秒的值时,我得到的只是正常的超时异常。

现在还有一件事:我说我会发布一些数据。看起来这整个行为取决于发送的数据量。到目前为止,我可以说在发送长度为 ca 的字符串时将其固定下来。4500 个字符,所描述的行为不会发生,但一切都很好,我得到一个正确的 HTTP 204“无内容”响应。一旦我发送 ca。超过 6000 个字符,就会发生上述连接中断。我在这里发送的字符串只是虚拟数据。发送的字符串只是'a' 的序列,即“aaaaaaaa...”,使用for 循环创建,分别进行4500 或6000 次迭代。

在我的生产代码中,我真的很想等到服务器操作完成,但我不知道如何防止连接断开。

Neo4j 服务器上是否有配置选项(我查看但没有找到任何东西)或者不是服务器的错,我的客户做错了什么?某处的错误?

感谢阅读和任何帮助或提示!

4

1 回答 1

0

总结一下:我最终发现 Jetty 中存在一个默认超时常量(我认为 Neo4j 当时使用的是 6.x 版)设置为正好 200 秒。这可以使用 Jetty API 进行更改,但 Neo4j 服务器似乎没有提供任何配置它的可能性。更改为 Neo4j 2.x 最终解决了这个问题(具体原因未知)。对于那些较新版本的 Neo4j,问题不再出现。

于 2015-06-15T14:28:26.320 回答