http://blog.johnryding.com/post/78544969349/how-to-reconnect-web-sockets-in-a-realtime-web-app
1 comment | 0 points | by WazanovaNews 約6時間前 edited
John RydingのブログでWebSocketの再接続のアルゴリズムの工夫について紹介しています。
リアルタイムウェブアプリにおいて、何らかの理由でバックエンドとの接続が切れた場合、クライアントは一定間隔で再試行するというロジックを設定(参考コード)していたとします。その場合、大量のクライアントがいて、もし長い時間接続が不能であれば、再開時にバックエンドには大量のリクエストが集中することになります。
そこでJohnがお薦めするExponential Backoffアルゴリズムは、
- 1. k回目の試行について、0から 2K-1秒の間でのランダムな実行タイミングをセットする。
- 2. 再接続に成功すれば、*k*を1にリセットする。
- 3. 再接続に失敗すれば、*k*は1回増えて、プロセスは1. に戻る。
- 4. 上記1.における2K-1秒の最大値は固定。つまりそこに到達すれば、以降の試行では0から最大値の間のランダムな実行タイミングがセットされる。
実装例としては、コードはこちら。
#websocket