【ISimpleSocketTcpClient】

はじめに

SOCKET-MANAGER Framework の新機能「シンプルソケット機能」では、TCPクライアント用のインターフェースとして ISimpleSocketTcpClient が用意されています。
本記事はリファレンス的な位置づけとして、インターフェースの定義や各メソッドの役割、利用時のポイントを整理します。
実際のメイン処理クラスの実装ガイドについては ▶TCP クライアントの実装 を参照してください。

スキャフォールディング

TCPクライアント用のシンプルソケットを利用する場合、専用のスキャフォールディングコマンドを使ってメイン処理クラスを生成できます。
> php worker simple:tcp-client MainForTest
                    

このコマンドを実行すると、ISimpleSocketTcpClient インターフェースを実装するためのメイン処理クラスが生成されます。
生成されたクラスの具体的な実装方法については、▶TCP クライアントの実装 を参照してください。

インターフェース定義

ISimpleSocketTcpClient インターフェースは、TCPクライアントとして必要な基本的な操作を定義しています。
interface ISimpleSocketTcpClient
{
    public function getSimpleSocketType(): SimpleSocketTypeEnum;
    public function send( string $p_dat ): ?bool;
    public function recv(): ?string;
    public function logWriter( string $p_level, array $p_param );
}
                    

このインターフェースを通じて、送受信・ログ出力といったサーバー機能を統一的に扱えます。

各メソッドの解説


getSimpleSocketType

/**
 * シンプルソケットタイプの取得
 * 
 * @return SimpleSocketTypeEnum シンプルソケットタイプ
 */
                    

  • SimpleSocketGenerator クラスのインスタンス化時に指定したソケットタイプを返します。
  • TCPクライアント用の場合は、常に SimpleSocketTypeEnum::TCP_CLIENT が返却されます。

send

/**
 * データ送信
 * 
 * @param string $p_dat 送信データ
 * @return ?bool true(成功) or false(失敗) or null(ダウンタイム中)
 */
                    

  • SimpleSocketGenerator クラスのインスタンス化時に指定した宛先(ホスト名 / ポート番号)に対してデータを送信します。
  • 戻り値は送信の成否を示し、ダウンタイム中は null が返ります。

recv

/**
 * データ受信
 * 
 * @return ?string 受信データ or null(なし)
 */
                    

  • サーバーからのデータを受信します。
  • データが存在しない場合は null が返ります。

logWriter

/**
 * ログ出力
 * 
 * シンプルソケットで使用しているログ出力と統合される
 * 
 * @param string $p_level ログレベル
 * @param array $p_param ログパラメータ
 */
                    

  • SimpleSocketGenerator::setLogWriter で登録したログライターを利用してログを出力します。
  • SocketManager や RuntimeManager と同じシグネチャのため、既存のログ基盤をそのまま流用可能です。
  • ログレベル(例:debug, info, error)とパラメータを渡すことで、統一された形式でログを記録できます。

実装例

以下は、SimpleSocketGenerator::setKeepRunning にクロージャを渡して ISimpleSocketTcpClient を利用する例です。
$generator->setKeepRunning
(
    /**
     * 常時実行処理
     * 
     * @param ISimpleSocketTcpClient $p_simple_socket シンプルソケットインスタンス
     * @param mixed[] $p_argv 可変引数
     * @return void
     */
    function(ISimpleSocketTcpClient $p_simple_socket): void
    {
        // データ送信
        $p_simple_socket->send('test data');

        // データ受信(エコーバック)
        $data = $p_simple_socket->recv();

        // データのログ出力
        $p_simple_socket->logWriter('debug', ['受信データ' => $data]);
    }
);
                    

この例では、送信したデータ("test data")をそのままサーバーから受信し、受け取ったデータをログに出力するシンプルなエコーサーバーとのやり取りを実装しています。

関連リンク