[PHP-users 10363] Re: ブラウザを閉じた場合のソケット通信切断方法

NAKAMURA Takeshi php-users@php.gr.jp
Thu, 26 Sep 2002 16:47:59 +0900


仲村です

 うそを付いてるかも知れないので、確認方法を(^^;;;;;
# 突っ込まれてないので、多分大丈夫だと思いますが

From: "aiko" <vvv_aiko_vvv@hotmail.com>
Date: Wed, 25 Sep 2002 11:23:45 +0000
Subject: [PHP-users 10347] Re: ブラウザを閉じた場合のソケット通信切断方法

>> ブラウザがデータを読み込み中でない
>>  ==> PHP は動いていない
>>  ==> ソケットは繋がっていない
>>  ==> ウィンドウを閉じようと何しようと関係ない
>
> ブラウザとの接続が切れたら、PHPは動いていないのですか??
> ブラウザとの接続が切れても、PHPのプログラムは動いていると思っていました。

 apache がどう動いているかを考えれば、apacheの下で動く PHP の
動きも分かると思います。
# apache は、要求されたコンテンツが PHP のものであれば php プログラムとして
# 解釈し実行を始め、一番最後まで実行して その結果をブラウザに渡しますよね
# ブラウザの表示が終わる ==> phpの実行が終わっていると理解して良いんじゃないでしょうか。

>> ブラウザがデータを読み込み中に ウィンドウを閉じた
>>  ==> サーバーへ ack が帰ってこない(かな?)
>>  ==> タイムアウト
>>  ==> PHPの処理が中断され自動的にソケットが close
>> でも、いいと思うけど。
>
> ↑はタイムアウトするまで、PHPは動いているということですよね。

 ひょっとすると、ブラウザが終了するときに fin パケットを投げて
apache がアイドルに戻るかも知れません。 この辺りは、ご自身で
tcpdump や ethereral を使ってパケットを覗いたり /server-status を
見てみるとよく分かるかも知れません。
# ブラウザ毎に動きが違って頭が混乱して楽しいかも???

>> phpが動いているのってほんのちょっとの間だけですよねぇ?
>
> PHPの動作とブラウザとの関係を私が認識してないだけ?

 PHPは apache の下で動いていますので、apache に注目してみると
良いかと思います。
 何度か、読み込み中にブラウザを終了させて apache のプロセスが
増えるかどうか とか、
 実際にソケットがクローズされるかどうかは
「netstat -na | find "EST" (for win)」,「netstat -na | grep EST (for UNIX)」
で、接続中のものを実際に見て確認する等してみるといいと思います。