foo are you, man.

基本的には技術ネタ書きます. 備忘録的な感じで行きます!

HerokuにてFlask-SocketIO使う時に503エラーが出る時の対処法

HerokuにてWebSocketを使う時にUnexpected response code: 503が出てしまい上手く通信が出来ない場合があります。

Socket.IOはWebSocket以外にもAjaxポーリングだとかJSONポーリングだとか様々な通信方法に対応しており状況に応じて臨機応変に変更してくれる機能をもっております。
Herokuに関しては今年の初めぐらいにWebSocketに正式対応したみたいでWebSocketを使ってワイワイ通信できます。

が、冒頭にも書いたように何故か急に503エラーが出て通信ができなくなりました。そこでググってみた所色々と引っ掛かり“Unexpected response code: 503” in Chrome. Perhaps having to do with socket.io on heroku?では以下の行を追加すれば直るよ!と書いてありました。

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});

さてコレですがFlask-SocketIOではどう書くのでしょう…
そこで、SocketIOオブジェクトのrunメソッドの引数を調べてみました。
結果transportsとclose_timeoutをごにょごにょすればいいっぽいと分かりました。

socketio.run(app,transports=['websocket'],close_timeout=10)

こうしてあげてデプロイ->ページに接続した所無事503エラーが消えたのでした!
ちなみにtransportsはリストで渡し、Flask-SocketIOでは'websocket', 'xhr-multipart', 'htmlfile', 'jsonp-polling', 'flashsocket', 'xhr-polling'の6つに対応している様です。