読者です 読者をやめる 読者になる 読者になる

iアプリの通信タイムアウトは約60秒?

ガラケー

iアプリ(Doja)で、「1分を超えると通信が途絶える&詳細不明の例外発生」に悩まされた。
ググっていると、どうもDojaの通信は約60秒でタイムアウトするという噂がある。
もしかしてソレなんじゃないかと。


Linuxで使えるGUIのパケットキャプチャ・ツールがあるというので、そこら辺を確認してみました。
使ったツールは「Wireshark」。LinuxやWindowsで使えます。
本家のダウンロードサイトは↓
「Wireshark」
解説は↓が詳しいです。
Linuxで動く便利ツール ネットワークを見える化してくれる「Wireshark」


●今回の手順

  1. Linuxサーバに「Wireshark」をインストール
  2. 120秒間スリープ(sleep)してから終了するPHPスクリプトを設置
    1. 120秒処理が続けられるようhttp.confやphp.iniの設定見直し
    2. ブラウザからアクセスして、処理が120秒続くのを確認
  3. 上記PHPスクリプトと通信(POST)するだけのiアプリを用意
  4. 携帯(F01A)から実行


「Wireshark」でのモニタ結果は↓です。


  • Timeカラムは経過秒
  • Sorceカラムは通信元、Destinationカラムは送信先
  • 210.136.161.169は、ドコモ(今回使用したF01A)のIPアドレス
  • グレーで塗りつぶしてあるのが、「Wireshark」を実行しているLinuxサーバのIPアドレス


No1から携帯とサーバのハンドシェイクで通信が開始します。
赤枠で囲われている「POST」は、携帯からきたHTTP通信のPOST。
その下の赤枠、58秒のところでクライアントのF01Aからサーバに「ACK,FIN」が。
これは通信終わるよー、というフラグらしいです。

通常は、まずサーバが処理を終了して「ACK,FIN」を発行し、クライアントが「ACK」を返してから、クライアントからの「ACK,FIN」がでます。
今回はPHPスクリプトが120秒スリープする設定だったのですが、58秒くらいで携帯(ドコモのネットワーク?)から「もう終わるからいいよ、お前にはもうきかねー」というフラグがきて通信終了しちゃった、という感じすかね。


TCPまわりは詳しくないですが、多分こんな感じ、ということで。