我有一个快速服务器,在发布到 Cloud Foundry 后会达到 1 分钟的超时。在本地,我可以设置所需的任何超时。这可能是Pivotal Cloud Foundry的问题,但我不确定什么设置可能会破坏事情。这是我在代码中尝试的内容:
https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_server_settimeout_msecs_callback
https://nodejs.org/dist/latest-v8.x/docs/api/http.html#http_server_timeout
https://github.com/expressjs/timeout
https://github.com/expressjs/express/issues/2174
然后只是为了踢,我把它们都放到我的代码中,1 分钟后它仍然超时。这是我得到的原始响应:
HTTP/1.1 504 GATEWAY_TIMEOUT
Content-Length: 0
Connection: keep-alive
我认为也许我必须设置一些 linux 服务器配置。节点上是否有任何内容可以硬限制连接可以持续多长时间?是什么让它发送该响应?我的代码中没有任何内容可以发送504 GATEWAY_TIMEOUT
.在本地,当我设置 1 分钟超时时,我什至没有得到该响应。我得到:
Empty reply from server
这很正常。任何建议不胜感激。
--------------------更新--------------------
Francisco Mateo谈到的GoRouter确实是问题所在,但根据Pivotal的支持:
要更改 go 路由器上的超时,您必须修改 go 路由器的 BOSH 清单。在完整的 Pivotal Cloud Foundry 环境中,这是一个微不足道的变化。但是,我们不允许在 Pivotal Web 服务上进行此类更改,因为它们会影响多个客户。
显然不可能覆盖它,但是如果我不时发送数据,我可以保持连接活动。因此,如果我每 10 秒发送一次空白空间,那么我可以永远保持连接活动状态。不过这很丑陋。响应将有一堆空白区域,然后将显示数据。
下一个问题:
有没有办法发送没有数据的ping?
我尝试发送一个空字符串,但 Go 路由器认为它不发送任何内容。也许是一个空洞的角色?
这与 Node 或您的 Express 应用程序无关。这是由于Cloud Foundry使用的gorouter
设置了60秒的超时。
看:
- https://github.com/cloudfoundry/gorouter/issues/100
- https://cf-docs.jp-east-https://cf-docs.jp-east-1.paas.cloud.global.fujitsu.com/en/manual/faq/faq/topics/c-faq-14.html
可能有一种方法可以覆盖它:https://docs.cloudfoundry.org/services/route-services.html#timeouts