2017-03-04 60 views
2

一旦我开始使用渠道,凤凰城,我开始在Heroku上有很多这样的错误:用药剂/凤凰频道的Heroku H15错误

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的凤凰页面
  2. 关闭您的笔记本电脑
  3. 的盖子等待一分钟左右(无线网络连接断开/ OS进入睡眠状态)
  4. 将发生H15错误。

我已经在我的UserChannel上设置了45s的超时时间;我跑药剂1.4.2,凤凰1.2.1和我phoenix.js刚刚升级到凤凰城使用的一个1.3.0-rc0link 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的离开,其他)。

+0

https://devcenter.heroku.com/articles/error-codes#h15-idle-connection - 这可能会回答你的问题。 –

+0

@JustinWood感谢您的链接,但是我正在为我的Phoenix应用程序寻找解决此问题的解决方法或解决方法,而不是解释H15错误代码的含义。 – Svilen

回答

0

Phoenix docs建议设置WebSocket的运输超时< 55秒时:

defmodule HelloWeb.UserSocket do 
    use Phoenix.Socket 

    ... 

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

他们的解释是:

这确保了任何空闲的连接由凤凰关闭他们到达Heroku的55秒前超时窗口。

+1

谢谢你的回答彼得;不幸的是我已经有一个超时设置,并不能防止错误发生。 – Svilen

+0

啊,我的坏 - 'timeout'参数设置在'channel'上,而不是'transport'。把它放在“交通工具”上,它应该确实解决问题! – Svilen