2017-03-04 61 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