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