狠狠撸

狠狠撸Share a Scribd company logo
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
? 徳島県神山町在住
Cloud Firestore を使って、Polling をやめたい話
厂补苍蝉补苍神山ラボ
Firebase Summit 2019
に参加しました
その前にバルセロナ観光
Lost baggage…
? Madrid -> Barcelona
Cloud Firestore を使って、Polling をやめたい話
日本人参加者とナイトモード対决
本题へ
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 をやめたい話

More Related Content

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