通信サーバ構築 PEAR :: Net_Server

PHP::PEAR

概要

「このあたりのものをPHPで組むってどおよ?」と思われても困るが。

(ノ・・)ン。。。。。。(((●コロコロッ

プロトコルを自作したことはあるだろうか?
HTTP, SMTP, POP, IMAP, LDAPなどなど、
様々プロトコルが存在して、
皆さんはこれらを(意識的に、無意識的には無関係に)使用しているはず。
では自前でプロトコルを製作したことはあるかな?

telnet localhost 10000

って言う感じで接続し、
入力した文字を受け取って処理を行うプログラムだ。
なんて言う文字を入力したときに、
なんて言う処理を行い、
なんて言う言葉を返すかというのがいわゆる通信プロトコルだ。

PHPerな方々は「Webでプログラム」っていうのが大前提で、
このあたりのものに関わることはほとんど無いだろう。
逆に仕事で使用する場合では、PHPの様なスクリプト言語では遅くて使い物にならないかもしれない。
(応答速度を測ったことがないのでなんともだが。過去にメルマガ配送エンジンをRubyで実装しているのを見たことがあるので問題ないかもしれないが。)
本来ならばC++などの出番なのだろうが。
それをPHPでやってしまおうというのがこのPEAR::Net_Server
ちなみにWindowsの出番はない。

デーモンというのをご存じの方も多いと思う。
サーバ上の常駐プログラムのことで、
メモリ上にロードしておき特定のポートにアクセスが来た時にアクションをおこす。
これらの動作はPHPで製作することも可能で、
実行するための関数群がsocketだ。
PEAR::Net_Serverはそれらをマスクするクラスだ。

socket関数を使っての通常のやりとりであるSequentialモジュール。
CLI,CGI版で利用できるマルチプロセス用pcntl関数を使用したForkモジュール。
Apache2用のマルチプロセスを使用したMultiprocessモジュールがある。
なかなか本格的だ。
ただし、マルチプロセスに対応させるにはインストールのハードルが結構高い。
なので、今回はSequentialを使用した。
マルチプロセスについては別の機会にしよう。(ってか私も良く理解していない)

インストール

Sequentialモジュールの場合でも、
socket関数を使用しているため、
PHPのconfigureオプションに

--enable-sockets

を追加しておく必要がある。
後はPearコマンドでインストールするだけ。

pear install net_socket

サンプル

ハンドラを上書きし自身のプロトコルを作成。
そのハンドラを取りまわす形でコードを記述し、
サーバーに常駐させる形でプログラムを始動する。

handler作成

Handlerクラスを継承した自前のクラスを用意しプロトコルを作成する。

<?
require_once 'Net/Server.php';
require_once 'Net/Server/Handler.php';

class myHandler extend Net_Server_Handler{
 
 ・・・各種メソッドをオーバーライド
 
}
?>

各種メソッドについては後述。

サンプルコード

プログラムは常駐させるので

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();
?>

起動

php server.php 

常駐させる時は

php server.php &

終了

kill [プロセス番号]

ちなみにPEAR::System_Socketというのも存在するが、
つくりが複雑な割にできることがイマイチなのと、
メンテナンスがもう行われていないのであまりオススメではない。


お名前:


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Third Project
証券会社ランキング比較