Heroku H15与Elixir / Phoenix频道出错

时间:2017-03-04 23:40:56

标签: heroku elixir phoenix-framework phoenix-channels

一旦我开始在凤凰城使用频道,我就开始在Heroku上收到很多这些错误:

heroku[router]: at=error code=H15 desc="Idle connection" method=GET
path="/socket/websocket?guardian_token=eyJhbGciOiJIUz[...]&vsn=1.0.0" host=[...]
dyno=web.1 connect=0ms service=87803ms status=503 bytes=

重现这一点的可靠方法是在笔记本电脑上:

  1. 打开连接到WebSockets的Phoenix页面
  2. 关闭笔记本电脑的盖子
  3. 等一下左右(WiFi断开连接/操作系统进入睡眠状态)
  4. 将发生H15错误。
  5. 我已经在我的UserChannel上设置了45秒超时;我正在运行Elixir 1.4.2,Phoenix 1.2.1而我的phoenix.js刚刚升级为凤凰城使用的1.3.0-rc0 link to rev

    我可以看到前端记录的错误,但之后它会愉快地重新连接到后端:

    2017-03-04 23:28:55.351 receive: ok user:2 phx_reply (3)
    2017-03-04 23:29:24.269 channel: error user:2
    2017-03-04 23:29:28.713 push: user:2 phx_join (4)
    2017-03-04 23:29:28.745 receive: ok user:2 phx_reply (4)
    

    非常感谢任何帮助或想法如何解决这个问题。

    修改:我熟悉Heroku的H15 error code definition,所以我正在寻找修复或解决方法来摆脱错误(其他而不是从Heroku迁移出去。当然)。

1 个答案:

答案 0 :(得分:2)

Phoenix docs建议将websocket传输的超时设置为< 55秒:

defmodule HelloWeb.UserSocket do
  use Phoenix.Socket

  ...

  ## Transports
  transport :websocket, Phoenix.Transports.WebSocket,
    timeout: 45_000
    ...
end

他们的解释是:

这可确保Phoenix在到达Heroku的55秒超时窗口之前关闭任何空闲连接。