久々にPHPでソケット通信アプリを開発してます。WEBシステムで管理ページを開発し、設定内容をDBではなくSocket通信でアプリケーションに渡すというものです。
通知先のアプリケーションは開発環境にインストールしても動作しないので、開発にあたり簡単な(エラー処理とかが最低限の)シミュレータを開発したのでPHPで作る、Socket通信サーバの機能を簡単ご紹介します。
まずはソース一式
set_time_limit(0); $port = "9999"; $socket = socket_create_listen($port); if ($socket === false) die("Error!"); while (true) { $client = socket_accept($socket); if ($client === false) die("Error!"); $request = socket_read($client, 4096, PHP_BINARY_READ); $return = "接続されたよ!!"; socket_write($client, $return); } socket_close($client);
解説
set_time_limit(0);
タイムアウトさせないための設定です。
$port = "9999";
待ち受けするポートを指定します。
$socket = socket_create_listen($port);
接続を受け付けるためにポートをオープンする
if ($socket === false) die("Error!");
ソケットがオープンできなかった場合エラー
while (true) { }
whileを抜け出す処理までループ(基本的にwhile内でwhileを抜け出す処理を実行しなければ無限ループになります)
$client = socket_accept($socket);
ソケットへの接続を許可する
if ($client === false) die("Error!");
接続を許可できなかった場合エラー
$request = socket_read($client, 4096, PHP_BINARY_READ);
接続されたsocketからデータを読み出す
$client:socket_acceptで許可したリソース
(4096):読み出すバイト数
(PHP_BINARY_READ):読み出しTYPE
$return = "接続されたよ!!";
応答内容を指定
socket_write($client, $return);
接続されたsocketにデータを返す
socket_close($client);
ソケットを閉じる
本番運用する場合には、エラー処理などの追加が必要ですが、テストで使用するだけであればこれで問題ないかと思います。
作ったファイルをサーバのコマンドラインからで実行すれば待受が開始されます。
読みだした$requestの内容を判断して$returnのデータを書き換えれば様々な電文の処理をシミュレートすることが可能になります。