【问题标题】:Meteor js on Heroku with 2 or more dynos带有 2 个或更多测功机的 Heroku 上的 Meteor js
【发布时间】:2014-06-16 03:30:49
【问题描述】:

最近 Heroku 改变了他们的 websocket 的工作方式。当我将测功机滑块设置为 2 或更多时,我的 MeteorJS 应用程序现在无法连接。这是我在浏览器控制台中遇到的错误:

POST http://name.herokuapp.com/sockjs/414/ye3xmaq8/xhr_send 404 (Not Found) 

我并不特别需要 2 个 dyno 的性能,我只是无法忍受 1 个 dyno 在睡眠后出现的长时间延迟。

【问题讨论】:

  • 快速破解:您可以添加一个工人。
  • Heroku 没有 sockjs 正常运行所需的会话亲和性。而且看起来您的应用程序无论如何都不能使用 websockets?
  • 谢谢 Slava 但我会接受大卫的回答!
  • @imslavko 流星仍然只能在一个 heroku dyno 上运行吗?
  • 我认为他们已经实现了粘性会话,但我没有尝试。

标签: javascript heroku websocket meteor


【解决方案1】:

正如 Slava 所说,Heroku 目前没有粘性会话,因此拥有多个 Dyno 是行不通的。如果没有粘性会话,来自同一客户端的后续请求将转到不同的伺服器,并且 Meteor 将发布状态存储在服务器上,因此这不起作用。

对于 Dyno 进入睡眠的具体问题,有一个解决方案。首先转到您的应用程序,然后选择底部的“+ Get Add-ons”,然后搜索“Heroku Scheduler”。这个插件可以让你运行计划任务。如果该计划任务是每十分钟左右对您的 Heroku 服务器进行一次“卷曲”,那么 Dyno 将不会进入睡眠状态,因为它正在查看流量(即使它在 heroku 中的形式:)

预定的命令可能如下所示:

curl http://www.yourHerokuAppUrl.com/ -s > /dev/null

选择 1x dyno 和“每 10 分钟”的频率,您将不会遇到因等待 dyno 从睡眠中恢复而导致的延迟问题。

【讨论】:

  • 很高兴您添加了一个真正解决了主要问题的答案:)。谢谢大卫
  • dyno 在 1 小时不活动后休眠,因此您可以每 5000 万安排一次 curl 请求。blog.heroku.com/archives/2013/6/20/app_sleeping_on_heroku
  • 他们确实在一小时后睡觉,所以 50 分钟是理想的,但上次我检查 Heroku 调度程序插件只允许您选择 3 个频率选项:每天、每小时、每 10 分钟.这就是我说选择 10 分钟的原因。
  • 你在哪里定义这个任务?我试图在我的流星应用程序中定义一个简短的脚本,但是当我创建计划的作业时,找不到该脚本
【解决方案2】:

只是为了更新答案。

Heroku supports session affinity(或粘性会话)自 2015 年 4 月起,您可以在 Meteor 应用上使用许多 dynos

只需启用它

$ heroku labs:enable http-session-affinity

【讨论】:

    猜你喜欢
    • 2016-07-08
    • 2013-01-23
    • 2013-02-22
    • 2014-02-07
    • 1970-01-01
    • 2016-03-25
    • 2015-12-31
    • 2012-06-15
    • 1970-01-01
    相关资源
    最近更新 更多