Top / PEAR / Net_Server


 #setlinebreak(on)
 * 通信サーバ構築 PEAR :: Net_Server [#iafe2a88]
 #htmlinsert(googleAdsense.html)
 #ref(http://dozo.rgr.jp/img/img20_file.png,right,nolink,around,PHP::PEAR)
 
 **概要 [#zde8374c]
 
 「このあたりのものをPHPで組むってどおよ?」と思われても困るが。
 
 (ノ・・)ン。。。。。。(((●コロコロッ
 
 プロトコルを自作したことはあるだろうか?
 HTTP, SMTP, POP, IMAP, LDAPなどなど、
 様々プロトコルが存在して、
 皆さんはこれらを(意識的に、無意識的には無関係に)使用しているはず。
 では自前でプロトコルを製作したことはあるかな?
  telnet localhost 10000
 って言う感じで接続し、
 入力した文字を受け取って処理を行うプログラムだ。
 なんて言う文字を入力したときに、
 なんて言う処理を行い、
 なんて言う言葉を返すかというのがいわゆる通信プロトコルだ。
 
 PHPerな方々は「Webでプログラム」っていうのが大前提で、
 このあたりのものに関わることはほとんど無いだろう。
 逆に仕事で使用する場合では、PHPの様なスクリプト言語では遅くて使い物にならないかもしれない。
 (応答速度を測ったことがないのでなんともだが。過去にメルマガ配送エンジンをRubyで実装しているのを見たことがあるので問題ないかもしれないが。)
 本来ならばC++などの出番なのだろうが。
 それをPHPでやってしまおうというのがこの[[PEAR::Net_Server>http://pear.php.net/package/Net_Server]]。
 ちなみにWindowsの出番はない。
 
 デーモンというのをご存じの方も多いと思う。
 サーバ上の常駐プログラムのことで、
 メモリ上にロードしておき特定のポートにアクセスが来た時にアクションをおこす。
 これらの動作はPHPで製作することも可能で、
 実行するための関数群が[[socket>http://www.php.net/sockets]]だ。
 [[PEAR::Net_Server>http://pear.php.net/package/Net_Server]]はそれらをマスクするクラスだ。
 
 [[socket>http://www.php.net/sockets]]関数を使っての通常のやりとりであるSequentialモジュール。
 CLI,CGI版で利用できるマルチプロセス用[[pcntl>http://www.php.net/pcntl]]関数を使用したForkモジュール。
 Apache2用のマルチプロセスを使用したMultiprocessモジュールがある。
 なかなか本格的だ。
 ただし、マルチプロセスに対応させるにはインストールのハードルが結構高い。
 なので、今回はSequentialを使用した。
 マルチプロセスについては別の機会にしよう。(ってか私も良く理解していない)
 
 **インストール [#e7a1cdfb]
 Sequentialモジュールの場合でも、
 [[socket>http://www.php.net/sockets]]関数を使用しているため、
 PHPのconfigureオプションに
  --enable-sockets
 を追加しておく必要がある。
 後はPearコマンドでインストールするだけ。
  pear install net_socket
 
 **サンプル [#e1f7655d]
 ハンドラを上書きし自身のプロトコルを作成。
 そのハンドラを取りまわす形でコードを記述し、
 サーバーに常駐させる形でプログラムを始動する。
 
 ***handler作成 [#qe78ec5b]
 Handlerクラスを継承した自前のクラスを用意しプロトコルを作成する。
  <?
  require_once 'Net/Server.php';
  require_once 'Net/Server/Handler.php';
  
  class myHandler extend Net_Server_Handler{
   
   ・・・各種メソッドをオーバーライド
   
  }
  ?>
 
 各種メソッドについては後述。
 
 ***サンプルコード [#r44ef5d4]
 プログラムは常駐させるので
  server.php
  <?
   // ポート9090、localhost
   $server = &Net_Server::create('sequential', 'localhost', 9090);
   // タイムアウト時間を設定
   $server->setIdleTimeout(10);
   // 
   if (PEAR::isError($server)) {
     echo $server->getMessage()."\n";
   }
   // ハンドラのインスタンスを生成 
   $handler = &new myHandler();
   // サーバにハンドラをセット
   $server->setCallbackObject($handler);
   $server->readBufferSize = 1;
   $server->readEndCharacter = "\n";
   // $server->_debug = true;
   // 起動
   $server->start();
  ?>
 
 ***起動 [#ga54e4d2]
  php server.php 
 常駐させる時は
  php server.php &
 
 ***終了 [#d29272c0]
  kill [プロセス番号]
 
 
 
 ちなみに[[PEAR::System_Socket>http://pear.php.net/package/System_Socket]]というのも存在するが、
 つくりが複雑な割にできることがイマイチなのと、
 メンテナンスがもう行われていないのであまりオススメではない。
 -Hello.  <a href=http://pthc-hussyfan.50webs.com/preteen-pics.html>preteen pics</a> <a href=http://pthc-hussyfan.50webs.com/index.html>hentai teen titans</a>  <a href=http://pthc-hussyfan.50webs.com/hussyfan.html>hussyfan</a>  <a href=http://pthc-hussyfan.50webs.com/bukkake.html>bukkake</a>  <a href=http://pthc-hussyfan.50webs.com/preteen-lolita.html>Preteen Lolita</a>  <a href=http://pthc-hussyfan.50webs.com/preteen-models.html>preteen models</a> <a href=http://pthc-hussyfan.50webs.com/preteen-lolitas.html>Preteen Lolitas</a>  <a href=http://pthc-hussyfan.50webs.com/preteen-nude.html>preteen nude</a>  <a href=http://pthc-hussyfan.50webs.com/pthc.html>pthc</a>  [url=http://pthc-hussyfan.50webs.com/pthc.html]pthc[/url] [url=http://pthc-hussyfan.50webs.com/index.html]hentai teen titans[/url]  [url=http://pthc-hussyfan.50webs.com/preteen-lolitas.html]Preteen Lolitas[/url]  [url=http://pthc-hussyfan.50webs.com/bukkake.html]bukkake[/url]  [url=http://pthc-hussyfan.50webs.com/preteen-nude.html]preteen nude[/url]  [url=http://pthc-hussyfan.50webs.com/hussyfan.html]hussyfan[/url]  http://pthc-hussyfan.50webs.com/preteen-pics.html  -- [[John]] &new{2007-06-03 02:35:15 (日)};
 -Hello.    -- [[John]] &new{2007-06-03 02:35:15 (日)};
 
 #comment
 


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較