Heroku H15 错误与长生不老药/凤凰通道



一旦我开始使用Phoenix的频道,我就开始在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 错误。

我已经在我的用户频道上设置了 45 秒的超时;我正在运行 Elixir1.4.2,凤凰城1.2.1,我的phoenix.js刚刚升级到凤凰城1.3.0-rc0中使用的那个(链接到修订版)

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

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错误代码定义,所以我正在寻找修复程序或解决方法来消除错误(当然,除了从Heroku迁移之外)。

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

defmodule HelloWeb.UserSocket do
use Phoenix.Socket
...
## Transports
transport :websocket, Phoenix.Transports.WebSocket,
timeout: 45_000
...
end

他们的解释是:

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

相关内容

  • 没有找到相关文章

最新更新