Cloud Firestore を使って、
Polling をやめた話
2019/10/29
Firebase Meetup in Osaka #6
Kenichi Tatsuhama
Cloud Firestore を使って、
Polling をやめた話
2019/10/29
Firebase Meetup in Osaka #6
Kenichi Tatsuhama
About me
辰濱健一(Kenichi Tatsuhama)
• @tatsuhama50
• Sansan, Inc. Android developer
• GDG Shikoku Organizer
• 徳島県神山町在住
Sansan神山ラボ
Firebase Summit 2019
に参加しました
その前にバルセロナ観光
Lost baggage…
• Madrid -> Barcelona
日本人参加者とナイトモード対決
本題へ
Cloud Firestore を使って、
Polling をやめた話
Cloud Firestore を使って、
Polling をやめた話
なかなかの浪費っぷり…
背景
• 複数端末や Web でも利用可能なサービス
• クライアントで極力最新の状態を取得したい
• 新着バッヂ
• ユーザの状態(課金の有無等)
• 上記状態取得の API 通信を何度も呼んでいる
• 起動時、メイン画面再表示時、…
• 状態が変わったときにだけ、通信をしたい
新着バッヂ
(赤丸)
背景
• 複数端末や Web でも利用可能なサービス
• クライアントで極力最新の状態を取得したい
• 新着バッヂ
• ユーザの状態(課金の有無等)
• 上記状態取得の API 通信を何度も呼んでいる
• 起動時、メイン画面再表示時、…
• 状態が変わったときにだけ、通信をしたい
新着バッヂ
(赤丸)
やりたいのは、こういうこと
都度問い合わせ 変更があったら通知
Before After
リアルタイム通信の種類をざっと紹介
• Polling
• Long Polling
• Server Sent Events
• WebSocket
Polling
• PULL 型通信
• クライアントが定期的にリクエストを発行
• サーバはすぐにレスポンスを返す
• データの更新がなくてもアクセスが発生する
• 短い間隔で Polling が行われると、サーバ負荷が高まる
• この方法で最新状態の取得を行っていた!
Long Polling
• PULL 型通信
• クライアントからのリクエストを、サーバ側がデータの更新が
あるまでレスポンスを遅延させる
• Polling よりリアルタイム性は増す
• 繋ぎっぱなしになるので、メモリ消費量が多い
Server Sent Event
• PUSH 型通信
• HTTP の上で動作する
• リアルタイム性が高い
• クライアント側からはデータを送れない
• Push Notification はこれに該当
WebSocket
• 双方向通信
• 軽量
• HTTP とは別の規格
• サーバ、クライアントともに WebSocket に対応している必要
がある
Server Sent Event や WebSocket を導入しなくても、
リアルタイムの更新が実現できる!
システム構成
• Polling で取得していた API の値を Cloud Firestore へ切り出す
Polling
低頻度な通信
システム構成
• Polling で取得していた API の値を Cloud Firestore へ切り出す
データに更新があったら反映
監視登録&
リアルタイム反映
Cloud Firestore
低頻度な通信
補足:その他の方法
• Firebase Cloud Messaging
• GraphQL Subscription の実装(AWS AppSync 等)
まとめ
• Polling は負荷が高いデータ取得方法
• サーバからの変更通知を受ける方法で、通信負荷の削減を!
• それ、Cloud Firestore でできますよ。
告知
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話
Cloud Firestore を使って、Polling をやめたい話

Cloud Firestore を使って、Polling をやめたい話