Express 超时总是在 1 分钟后发生

Express timeout always occurs after 1 minute

我有一个快速服务器,在将其发布到 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 支持:

To change the timeout on the go router, you would have to modify the BOSH manifest of the go router. In a full Pivotal Cloud Foundry environment, this is a trivial change. However, we do not allow such changes to be made on Pivotal Web Services since they would affect more than a single customer.

显然不可能超过它,但如果我不时发送数据,我可以保持连接。因此,如果我每 10 秒发送一个空的 space,那么我就可以永远保持连接。但这很丑陋。响应将有一堆空 spaces,然后将显示数据。

下一题:

有没有办法发送没有数据的 ping?

我尝试发送一个空字符串,但 Go Router 认为这没有发送任何内容。也许是一个空字符?

这与 Node 或您的 Express 应用程序无关。这是由于 Cloud Foundry 使用的 gorouter 设置了 60 秒的超时。

参见:

可能有一种方法可以覆盖它:https://docs.cloudfoundry.org/services/route-services.html#timeouts