ku-sukeのブログ

Just another hatena blog

Pushメール(Notification)の仕組みとバッテリーについての考察

こういう話題:プッシュメールはバッテーリとの戦い - てのひら倶楽部

プッシュメールというのはWEBを読みあさった結果、MicrosoftのExchangeをみんなまねて実装しているみたいです。

どういった仕組みかというと

  1. アカウント登録時にExchange対応サーバか調べる
    • 多分ここでhttpsリクエストとか発行するんじゃないかと。
  2. 対応サーバだったら以下の事を行う
  3. ひとまずサーバにHTTPSリクエストを送信する。
  4. サーバ側は受け取ったリクエストをすぐに処理せず、キープしておく
  5. IMAPのidleとか、よくわかんないけど各種デーモンと組み合わせて、サーバ内で新着情報を受け取る
    • 新着情報がある場合
    1. メール来たよーとレスポンスを返す。
      • つまり、iPhoneはたとえロック状態でもHTTP通信のソケットはつながったままになってるはず
    • 新着情報がなく、タイムアウトとか電波切れになった場合
    1. タイムアウトの場合はサーバから「タイムアウトです」とレスポンスがくる
    2. そうじゃなくてもiPhone的に通信が切れたらまたhttpsリクエストを行う

ようするにcometそのものです。

なので、電波状況が良い場合は、HTTPのリクエストがタイムアウトするまで通信が発生しないので、帯域にもバッテリーにも優しいのですが、MobileMeのようにサーバが不安定だったり、電波状況が悪いと、iPhoneが容赦なく更新通知の確認にhttpsリクエストを発行するので電池が速攻で死んでしまうんだと思います。

ほんで、さらにいいますと、サードパーティアプリにNotificationを許可してしまうと、Jobsも失敗を認めたAppleのWEBサービス(httpsリクエストを受け取る鯖)が悲鳴を上げてみんな大変なことになるので、プッシュ通知サービスを2.1から取り下げたんだと思います。