web-dev-qa-db-ja.com

大きな遅延(時間)が許容できる場合のプッシュとポーリング

リモートサーバーから常にデータを受信する必要のあるモバイルアプリケーションを開発する場合、ポーリングは悪い習慣であり、プッシュは方法の1つであることは、今日では常識のようです。

すべての主要なモバイルショップは、プッシュ通知サービスのバージョンを提供しています。

しかし、私はこの仮定がどの程度有効であるのか疑問に思っています。つまり、リモートサーバーを1日に数回しかポーリングしないアプリケーションで、「通知」をすぐに配信する必要がない(大幅な遅延が許容される)場合は、適切な判断になります。データをプッシュする代わりにポーリングする方法は?

前もって感謝します!

ポーリングは、リアルタイムが必要でない場合は常に許容されます。あなたが自問しなければならないことは、なぜあなたが他のものの代わりに1つを使うのかということです?

プッシュサービスの目的は2つあります。プッシュがブロードキャストであり、サードパーティのプロバイダーがブロードキャストを行う場合は、処理するトラフィックが大幅に少なくなる可能性があります。これにより、1つのメッセージを送信して何千ものメッセージを受信できます。しかし、お気づきのように、Pushサービスの最大の恩恵は、リアルタイムの性質であり、即時の更新でコンシューマーに到達できます。ただし、プッシュを実行する場合、ブロードキャストしている場合は大規模なデータセットをプッシュしたくありません。また、サードパーティのプッシュサービス(利用している場合)のなすがままです。

ポーリングの目的は、データの違いを定期的にチェックすることです。更新期間には、一定の期間までSLA不正確さの許容範囲があります。すべてのクライアントは、データは定期的に実行されます。つまり、実行中のすべてのクライアントに接続が要求され、データを正確に監視してポーラーに提供できるようにするライブサービスが必要です。提供する正確なデータがあると、データを永続化してディスクを占有します。とメンテナンス時間。

これから、ネットワークトラフィックまたはサービスのメンテナンス(つまり、リクエストの認証/承認、ディスクスペースを消費するログの記録、サービスを維持するためのすべての通常の要件)に関する懸念がある場合、次のことがわかります。クライアントにポーリングを強制したい。ただし、ユースケースで特に大きなデータセットを送信する必要がある場合や、時間の経過とともにSLAまたは料金が変わる可能性がある)サードパーティのAPIに接続できない場合は、自社開発ポーリングシステムは適用可能かもしれませんが、メンテナンスのオーバーヘッドが大幅に増える可能性があります。または、すでにサービスを実行していて、データが永続化されているため、ポーリングは既に配置されているインフラストラクチャにわずかに追加され、ポーリングがより望ましいものになります。

中心的な点では、あなたが正しいことを確認します。リアルタイムが必要の場合、ポーリングは行われません。そうでない場合は、howの計算を定期的に行う必要があります。定期的にデータをチェックして、クライアントベースとデータセットサイズを掛け合わせて、ネットワークコストが価値があるかどうかを判断できます。または、プッシュサービスの方が優れている場合は、常に変更イベントをプッシュするだけで、2番目のステップで大きなデータセットを要求できます(これらのステップの原子性は、重要度に応じて注意する必要があるかもしれませんが)データの)。

14
Jimmy Hoffa

ポーリングはあなたの場合には問題ないはずです。そしてまだ別のシステム(または複数のプラットフォームの複数のシステム)と統合する必要はありません。

ただし、デバイスの仕様が問題になる場合があります。アプリがデバイスの前面と中央にない場合でも確実にポーリングできますか? (あなたにとって問題かもしれないし、そうでないかもしれません)。そのための能力は、アプリの開発に使用している技術に依存する場合があります。

3
GrandmasterB

もちろん。それも簡単です(全員が同じスケジュールでプルしている場合は、プルスパイクに注意してください)。

とはいえ、モバイルユーザーの期待を考慮して、「大きな遅延は許容できる」という仮定に異議を申し立てます。 (「マップはリアルタイムで更新されません!許容できません!」-または-「天気予報サービスですが、明日が晴れるまで5秒ごとに更新ボタンを押し続けます!」)

2
ptyx