iアプリ(Doja)で、「1分を超えると通信が途絶える&詳細不明の例外発生」に悩まされた。
ググっていると、どうもDojaの通信は約60秒でタイムアウトするという噂がある。
もしかしてソレなんじゃないかと。
Linuxで使えるGUIのパケットキャプチャ・ツールがあるというので、そこら辺を確認してみました。
使ったツールは「Wireshark」。LinuxやWindowsで使えます。
本家のダウンロードサイトは↓
⇒「Wireshark」
解説は↓が詳しいです。
⇒Linuxで動く便利ツール ネットワークを見える化してくれる「Wireshark」
●今回の手順
- Linuxサーバに「Wireshark」をインストール
- 120秒間スリープ(sleep)してから終了するPHPスクリプトを設置
- 120秒処理が続けられるようhttp.confやphp.iniの設定見直し
- ブラウザからアクセスして、処理が120秒続くのを確認
- 上記PHPスクリプトと通信(POST)するだけのiアプリを用意
- 携帯(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まわりは詳しくないですが、多分こんな感じ、ということで。