blog

端末間のデータ同期にwebsocket とポーリングのどちらを使うべきか

端末間でデータを同期させたいとき、選択肢として「WebSocket」と「ポーリング」があります。リアルタイム性をどこまで求めるのかによりますが、私の場合リアルタイム性を少し捨ててポーリングを選びました。検討中に気になったポイントをまとめておきます。

WebSocket

WebSocket はサーバとクライアントの双方向通信が可能な仕組みです。ただし、通知が相手に確実に届いたかどうかはWebSocket の仕組みでは保証されないため、必要であればアプリ側受信確認やリトライの実装が必要になります。
また、スマホの場合はトンネルなどで通信断となった場合に、スマホへリアルタイム通知が届かない可能性があります。

ポーリング

30秒に一度など定期的にサーバへ更新が入っていないか問い合わせを行う方式です。WebSocket に比べてリアルタイム性は落ちてしまいます。
スマホから接続するため、通信断についてはスマホからリトライを行うだけでよく、運用が楽になります。
ただし、WebSocket に比べて通信量が多くなります。ポーリングは毎回新たなHTTP リクエストを発行するため、アクセストークンやヘッダーが送信されます。1回のポーリングで数百バイト〜数KB程度の通信が発生し、これらがネットワークやサーバーの負荷となります。

結論

websocket を導入したとしても、スマホの通信断から復旧時にポーリングを行う必要があると考えました。
それであれば、多少のリアルタイム性を捨ててポーリングに一本化することで、開発と運用のコストをさげられるポーリングの方が現実的と思いました。

【広告】

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です