Heroku上的SSE请求中的H15问题

9
我在Heroku上有一个Node.js应用程序。最近,我将一个长查询切换为使用SSE(EventSource)。虽然在我的计算机上运行得非常好和快速,但我仍然在我的GET请求中不断收到Error H15(空闲连接)。H15的描述说我超过了每个事务允许的55秒。但是我的整个查询不需要超过4-5秒。
此外,在阅读说明后,我立即在命中查询之前返回我的第一个字节(只是一个数字),而它仍然无法工作。
我的问题是:
1. 我需要做些什么才能使这件事继续进行下去?HTTP标头参数?客户端JS方面的东西?我如何避免H15? 2. 我是否尝试做一些Heroku不支持的事情?我认为不是,因为我在Heroku上有另一个使用EventSource成功的应用程序(express-eventsource.herokuapp.com,源代码在github上:https://github.com/TravelingTechGuy/express-eventsource
像往常一样,感谢您的时间。
3个回答

13

尝试了一切,改变并重写我的代码,对网络进行分析等等,最终我的朋友(没有任何Node知识)提出了一个想法让我找到正确的方向:

这看起来是域名问题 - 根本不是代码问题。
我设置了ANAME映射,结果发现由于Heroku使用5个不同的IP,映射到其中一个可能会捣乱SSE调用。基本上,mydomain.com显示的IP与mydomain.herokuapp.com不同 - 这意味着服务器试图返回响应到不同于启动调用的IP,因此它超时了。

我放弃了ANAME而选择CNAME(基本上是放弃裸露的mydomain.com,改为www.mydomain.com),现在似乎正常工作了。

结论:

  1. 并非所有问题都是代码问题 - 如果它在一个环境中运作良好,在另一个环境中则不是,则是配置问题
  2. 如果你为某事奋斗太长时间了,最好引入新的眼光。即使没有专业知识,你也会得到一些很棒的想法和可以尝试的全新方法
  3. 1and1 DNS控制糟糕透了。离开那里吧

只是一个简短的更新:确实是域名问题。一切都运行良好(尽管速度较慢 - 免费的Heroku == 慢的Heroku :))。 - Traveling Tech Guy
啊,这个问题确实很烦人。您能否详细说明从ANAME到CNAME的更改过程? - Uday Reddy
基本上,它意味着不使用“裸露”的域名,比如mydomain.com。根据您的DNS控制(我使用GoDaddy),您应该能够通过DNS管理设置子域名(CNAME)。在此处查看更多信息:https://devcenter.heroku.com/articles/custom-domains - Traveling Tech Guy
嗨@philosopher。我还在这里。但是我现在大多数时间不在Heroku上,所以如果没有进行研究,我无法提供帮助。抱歉。 - Traveling Tech Guy
目前,Netlify 适用于快速部署,而 Lightsail 则适用于更长期的事情(从亚马逊获得完整服务器每月不到 $5)。 - Traveling Tech Guy
显示剩余2条评论

1
我在Meteor应用程序中遇到了同样的问题。突然间,应用程序的每次交互都返回一个websocket错误,并在heroku上返回一个h15错误。我通过将根URL更改为裸域名,然后将裸域名转发到www.example.com来解决这个问题。希望这也能帮助别人。 我也完全同意@TravelingTechGuy的看法:

并不是所有问题都是代码问题 - 如果在一个环境中运行良好,在另一个环境中就不行,那么这就是配置问题


问题涉及SSE,而Web套接字是完全不同的规范,具有自己的一套复杂性。 - Matt Jensen

-3

这可能是由于数据库引起的。如果数据库未连接,则很可能会出现此错误!


1
SSE与数据库无关。请参见下面的正确答案。 - Traveling Tech Guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接