PHPでネットワークストリーム(ソケット?)を扱う話

12月 24th, 2008 by key

いろんな関数からネットワークストリーム(ソケット?)が扱えます。

何が違うのかよくわからないものもありますが、少なくとも以下の関数がある。

お仕事で開発している某システムのバッチでは、コネクションタイムアウトとレスポンスタイムアウトを別々に扱いたかったので調べてみたところ、fsockopen()を使うとコネクションタイムアウトを取り扱えることがわかった。他の関数ではレスポンスタイムアウトは設定可能なものの、コネクションタイムアウトの設定は行えない。

こんな風に使う。

    // parse url
    $array = parse_url($url);

    $host    = $array['host'];
    $address = gethostbyname($array['host']);
    $port    = (!is_null($array['port'])) ? $array['port'] : 80;
    $path    = (!is_null($array['path'])) ? $array['path'] : '/';

    // connect to host
    do {
      $fp = @fsockopen($host, $port, $err, $errmsg, 5);
      // 接続したらループを抜ける
      if ($fp) break;

      // 接続できなかったら…
      // ループカウンタをインクリメント
      $lp_count++;

      // 1秒待ってリトライ&
      sleep (1);
    } while ($lp_count < $max_try_count);

socket_*の関数群ではもっと低レイヤの作業が出来そうだけど、fsockopenだとfgets/fputsなどの比較的上位の関数しか使えないようだ。

しかし、PHPはいろんな関数が揃っていて便利だなあ(キモイけど)。

タグ: ,

0 Responses to “PHPでネットワークストリーム(ソケット?)を扱う話”

Feed for this Entry Trackback Address
  1. コメントはまだありません

コメントをどうぞ