我一直在编写 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 服务器上是否有配置选项(我查看但没有找到任何东西)或者不是服务器的错,我的客户做错了什么?某处的错误?
感谢阅读和任何帮助或提示!