8

我在 Heroku 上有一个 Node.js 应用程序。我最近切换了一个长查询以使用 SSE (EventSource)。虽然它在我的机器上运行良好且快速,但我不断收到Error H15 (Idle connection)我的 GET 请求。H15 描述说我每笔交易允许超过 55 秒。但我的整个查询不会超过 4-5 秒。

此外,在阅读了描述之后,我会在点击查询后立即返回我的第一个字节(只是一个数字),然后再开始任何繁重的工作 - 它仍然无法正常工作。

我的问题是:

  1. 为了让这件事继续下去,我需要做什么?HTTP 标头参数?客户端JS端的东西?如何避免 H15?
  2. 我是在尝试做 Heroku 不支持的事情吗?我不这么认为,因为我在 Heroku 上有另一个成功使用 EventSource 的应用程序(express-eventsource.herokuapp.com,github 上的源代码:https ://github.com/TravelingTechGuy/express-eventsource )

一如既往,感谢您的宝贵时间。

4

3 回答 3

13

在尝试了一切、更改和重写我的代码、分析网络等之后,最后我的朋友(没有任何 Node 知识)想出了一个让我走上正轨的想法:

这似乎是一个域问题 - 根本不是代码问题。
我设置了一个 ANAME 映射,事实证明,由于 Heroku 使用 5 个不同的 IP,因此仅映射到其中一个会破坏 SSE 调用。基本上,mydomain.com 显示的 IP 与 mydomain.herokuapp.com 不同——这意味着服务器尝试将响应返回到与发起呼叫的 IP 不同的 IP,因此超时。

我放弃了 ANAME 以支持 CNAME(基本上,放弃了裸 mydomain.com 以支持 www.mydomain.com),现在它似乎正在工作。

结论:

  1. 并非一切都是代码问题 - 如果它在一个环境中运行良好而不在另一个环境中运行良好,则这是一个配置问题
  2. 如果你在某件事上挣扎太久,它会帮助你换一双新的眼睛。即使没有主题专业知识,您也会对可以尝试的新方法有很好的想法
  3. 1and1 DNS 控制糟透了 b@lls。搬离那里
于 2012-10-29T02:53:20.913 回答
1

我在 Meteor 应用程序中遇到了同样的问题。突然之间,每次交互都会在应用程序上返回一个 websocket 错误,在 heroku 上返回一个 h15 错误。我已经通过将根 url 更改为裸域,然后将裸域转发到 www.example.com 来解决它。希望这也会对某人有所帮助。我也完全同意@TravelingTechGuy 关于

并非一切都是代码问题 - 如果它在一个环境中运行良好而不在另一个环境中运行良好,则这是一个配置问题

于 2017-06-18T23:32:03.037 回答
-2

这有时可能是由于数据库的原因。如果数据库没有连接,这个错误很可能是可见的!

于 2021-04-02T15:23:38.753 回答