【发布时间】:2013-05-10 14:07:47
【问题描述】:
我一直在编写 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 服务器上是否有可供配置的选项(我查看了但没有找到任何东西),还是不是服务器的问题,我的客户做错了什么?某处的错误?
感谢您的阅读以及任何帮助或提示!
【问题讨论】:
-
不确定,但我猜要么有一些 Jersey 配置选项,要么是操作系统的设置。
-
嗯,有这样的泽西服务器端选项吗?找不到一个。 Neo4j Server 使用哪种 Web 服务器技术?普通的 Jersey 或某种嵌入式 Jetty 或...?
-
啊,对不起。我在之前的评论中指的是 Jetty。 Jetty 当然是在内部使用的。
标签: neo4j apache-httpcomponents jersey-client