【シンプルソケット機能】
はじめに
SOCKET-MANAGER Framework に新たに追加された「シンプルソケット機能(SimpleSocketGeneratorクラス)」は、従来の SocketManager や RuntimeManager と並ぶ新しいカテゴリです。
状態遷移を必要としない単純な送受信に特化し、TCP/UDP 通信をシンプルな構造で実装できます。
API サーバー、IPC 用途など、軽量なソケット通信を素早く構築したい場面に最適です。
参考リンク:
状態遷移を必要としない単純な送受信に特化し、TCP/UDP 通信をシンプルな構造で実装できます。
API サーバー、IPC 用途など、軽量なソケット通信を素早く構築したい場面に最適です。
参考リンク:
- SocketManager クラス解説ページ: https://socket-manager.github.io/document/
- RuntimeManager クラス解説ページ: https://socket-manager.github.io/document/runtime-manager/
用途と想定シナリオ
シンプルソケット機能は、TCP/UDP 通信をシンプルに実装したい場面で活用できます。
SOCKET-MANAGER Framework のシンプルソケット機能は、TCP/UDP 通信をフレームワーク内部でそのまま扱う設計のため、余計な抽象化レイヤーを挟まず高速に動作します。
また、通信処理には ダウンタイム(待機時間)を任意に設定できる仕組みがあり、トラフィック量やサーバー負荷に応じて柔軟に調整できます。
- API サーバー:リクエストとレスポンスの単純なやりとり
- IPC(プロセス間通信)用途:複雑な状態管理を必要としないケース
- 軽量なクライアント/サーバー実装:テスト用サーバーや簡易モニタリング
SOCKET-MANAGER Framework のシンプルソケット機能は、TCP/UDP 通信をフレームワーク内部でそのまま扱う設計のため、余計な抽象化レイヤーを挟まず高速に動作します。
また、通信処理には ダウンタイム(待機時間)を任意に設定できる仕組みがあり、トラフィック量やサーバー負荷に応じて柔軟に調整できます。
データフォーマット
シンプルソケット機能で扱うデータは、非常にシンプルな構成になっています。
アプリケーション側はペイロード部分のデータのみを扱えばよく、ライブラリが内部でデータ長を付与・解釈してくれます。
具体的には、送信時にペイロードの先頭へ 2 バイトのデータ長を付与し、受信時には先頭 2 バイトを読み取ってペイロード長を判定する処理を実装してください。
[ データ長 (2バイト, ネットワークバイトオーダー) ] + [ ペイロード部 ]
-
データ長
- 先頭 2 バイトに格納
- ネットワークバイトオーダー(ビッグエンディアン)で表現
- ペイロード部のバイト数を示す
-
ペイロード部
- 自由定義のデータ領域
- JSON 文字列やバイナリデータなど、用途に応じて任意の形式を格納可能
純正ライブラリ利用時の挙動
SOCKET-MANAGER Framework のシンプルソケット機能を利用する場合、送受信メソッドは データ長の付与や解釈を意識する必要はありません。アプリケーション側はペイロード部分のデータのみを扱えばよく、ライブラリが内部でデータ長を付与・解釈してくれます。
他ソリューションとの連携時の注意点
外部のライブラリや独自クライアント/サーバーと通信する場合は、データフォーマットを意識する必要があります。具体的には、送信時にペイロードの先頭へ 2 バイトのデータ長を付与し、受信時には先頭 2 バイトを読み取ってペイロード長を判定する処理を実装してください。
スキャフォールディング対応
他の機能と同様に、シンプルソケット機能も 専用のスキャフォールディングコマンド に対応しています。
- TCP 通信
- サーバー用コードの自動生成
- クライアント用コードの自動生成
- UDP 通信
- サーバー/クライアント兼用コードの自動生成
> php worker simple:tcp-server MainForTcpServerTest
> php worker simple:tcp-client MainForTcpClientTest
> php worker simple:udp MainForUdpTest
これにより、最小限のコードでソケット通信アプリを立ち上げられます。実装パターン
SimpleSocketGenerator クラスを利用した実装には、以下の3つのパターンがあります。
-
setUnitParameter メソッド
- UNIT パラメータインスタンスを渡すことで SocketManager 側で利用可能
- 生成されたインスタンスは UNIT パラメータの
simple_socketプロパティにセットされ、UNIT 内で利用できる
-
setKeepRunning メソッド
- イベントループ周期でコールバックされる関数や Closure 内に送受信処理を実装
- 常時実行処理を登録することで、周期的な通信処理が可能
-
generate メソッド
- 返却されるインターフェースメソッドを使って送受信等を行う
関連ドキュメント
SimpleSocketGenerator の各メソッド解説
SimpleSocketGenerator クラスで利用できる主要メソッドをまとめた解説ページです。各メソッドごとにアンカーリンクを設けているため、必要な箇所へすぐにアクセスできます。
- setLogWriter(ログライター設定)
- setKeepRunning(常時実行のコールバック登録)
- setUnitParameter(SocketManager連携)
- generate(TCP/UDP通信用のインスタンス生成)
- cycleDriven(イベントループでの常時実行処理)
- shutdownAll(全ソケットのクローズと後処理)
生成されるインターフェースの解説
SimpleSocketGenerator で生成される各インターフェースの詳細解説ページです。用途に応じてサーバー/クライアントの実装方法を確認できます。
新規開発環境
シンプルソケット機能は、他の機能と同様に 新規開発環境 から利用可能です。専用コマンドを使うことで、TCP/UDP サーバーやクライアントの雛形をすぐに生成可能。
サンプル紹介
実際の利用例として、SOCKET-MANAGER Launcher のカスタムモニタリング機能で利用している UDP 通信の実装を紹介しています。おわりに
- シンプルソケット機能は、軽量な TCP/UDP 通信を素早く実装できる新機能
- スキャフォールディング対応により、最小限のコードで開発開始可能
- 実装パターンは「generate」「setKeepRunning」「setUnitParameter」の3種類
- 他の機能と同様に新規開発環境リポジトリと連携