【RuntimeManagerのご紹介】
はじめに
SOCKET-MANAGER Framework に新たに加わった「RuntimeManager」は、SocketManager の高性能なイベントループ/コルーチン基盤を継承しつつ、ソケット通信を省いた常駐型アプリ専用のランタイムライブラリです。
本機能では、UNIT 単位による処理設計と、CPU 資源への適切な配慮を可能にする実行モデルにより、ビジネスロジックの安定かつ効率的な常駐処理が実現されます。
さらに、専用スキャフォールディングコマンド群により、実装の初期段階から明快かつ迅速なコード構築が可能となります。
このページでは、RuntimeManager で利用できるフレームワークの特徴を中心にご紹介します。
本機能では、UNIT 単位による処理設計と、CPU 資源への適切な配慮を可能にする実行モデルにより、ビジネスロジックの安定かつ効率的な常駐処理が実現されます。
さらに、専用スキャフォールディングコマンド群により、実装の初期段階から明快かつ迅速なコード構築が可能となります。
このページでは、RuntimeManager で利用できるフレームワークの特徴を中心にご紹介します。
メニュー構成
ここでは常駐型アプリ開発を行う際に必要な情報を、左メニューのカテゴリに分けてご紹介しています。
以下はそのメニューカテゴリの説明です。
また、以下のサブカテゴリもございます。
以下はそのメニューカテゴリの説明です。
MAIN-MENU
RuntimeManager が利用するフレームワークの概要や事前知識も含め、実装に必要な情報を公開しています。また、以下のサブカテゴリもございます。
- ・IMPLEMENT
-
実装のメインとなるコマンドを使ったコーディング方法を各コマンドごとにご紹介しています。
- ・ADVANCED
-
Laravel との連携方法など、より高度な使い方をご紹介しています。
- ・PROJECT
-
実装を始める時に利用可能なプロジェクト環境をご紹介しています。
フレームワークとしての特徴
常駐型アプリを開発するツールと言えば一般にライブラリ形式で提供されているものが多い印象ですが、このフレームワークでは頻繁に書くような慣習的なコーディング部分をコマンド操作で概ね補えるようになっていて、
SocketManager クラスを利用する場合は、プロトコル部( craft:protocol コマンドで生成)とコマンド(サーバーコンテンツ)部( craft:command コマンドで生成)に分けて実装が必要でしたが、RuntimeManager クラスを利用する場合は、ランタイム UNIT( runtime:units コマンドで生成)の定義だけで済むので少し簡易的になります。
また、設定ファイル( craft:setting コマンドで生成)やメッセージファイル( craft:locale コマンドで生成)は、どちらの環境でも使えます。
以下のようにフレームワークコマンドの Usage を表示すると、アプリの実装に必要なコマンド群がそれぞれ main、craft、runtime のカテゴリに分けて表示されます。
例えば、メイン処理を作成してインスタンス化し、アプリを起動するまでの手順は以下2ステップのコマンドで完結します。
今回の場合は
生成されたクラスは
(アプリ名は
これで中身が未実装状態のアプリが起動します。(
また、
コマンドベースのインターフェースは Laravel との連携を考慮しているので、▶Laravelと連携するのページでその連携方法をご紹介しています。
連携後は Laravel のコマンドを使ってアプリを起動する事もできるので、Laravel のリソースを使った開発が可能になる事に加え、Web アプリとのオールインワン環境としても使えるようになります。
また、Laravel との連携後であっても当フレームワークのコマンドを使って引き続きアプリ開発が行えます。
runtime
カテゴリでまとめられているコマンドが RuntimeManager 専用のスキャフォールディングコマンドになっています。SocketManager クラスを利用する場合は、プロトコル部( craft:protocol コマンドで生成)とコマンド(サーバーコンテンツ)部( craft:command コマンドで生成)に分けて実装が必要でしたが、RuntimeManager クラスを利用する場合は、ランタイム UNIT( runtime:units コマンドで生成)の定義だけで済むので少し簡易的になります。
また、設定ファイル( craft:setting コマンドで生成)やメッセージファイル( craft:locale コマンドで生成)は、どちらの環境でも使えます。
以下のようにフレームワークコマンドの Usage を表示すると、アプリの実装に必要なコマンド群がそれぞれ main、craft、runtime のカテゴリに分けて表示されます。
> php worker SOCKET-MANAGER Framework 1.16.0 Usage: command [arguments] main Empty... craft craft:init <初期化クラス名> 初期化クラスの生成 craft:parameter <UNITパラメータクラス名> UNITパラメータクラスの生成 craft:protocol <プロトコルUNIT定義のクラス名> プロトコルUNIT定義のクラスとステータス名Enumの生成 craft:command <コマンドUNIT定義のクラス名> コマンドUNIT定義のクラスとキュー/ステータス名Enumの生成 craft:main <メイン処理のクラス名> メイン処理クラスの生成 craft:setting <設定ファイル名> 設定ファイルの生成 craft:locale <メッセージファイル名> メッセージファイルの生成 runtime runtime:init <初期化クラス名> 初期化クラスの生成 runtime:parameter <UNITパラメータクラス名> UNITパラメータクラスの生成 runtime:units <ランタイムUNIT定義のクラス名> ランタイムUNIT定義のクラスとキュー/ステータス名Enumの生成 runtime:main <メイン処理のクラス名> メイン処理クラスの生成
例えば、メイン処理を作成してインスタンス化し、アプリを起動するまでの手順は以下2ステップのコマンドで完結します。
①メイン処理の作成
php worker runtime:main <メイン処理クラス名>
というコマンドを使ってメイン処理クラスのひな形を作成します。今回の場合は
MainForTest
というクラス名を指定。> php worker runtime:main MainForTest [success] メイン処理クラスの生成に成功しました (MainForTest)
生成されたクラスは
app/MainClass
の場所に格納されます。②アプリを起動
php worker
コマンドを使って app:main-for-test
というアプリ名を指定して起動。(アプリ名は
'app:' + <クラス名のキャメルケースをスネークケースに変換したもの>
になります)> php worker app:main-for-test
これで中身が未実装状態のアプリが起動します。(
Ctrl+C
で停止します)また、
php worker
を実行して再度 Usage を表示すると、先ほど生成したアプリの名前が main
カテゴリへ追加されているのが確認できます。> php worker SOCKET-MANAGER Framework 1.16.0 Usage: command [arguments] main app:main-for-test Command description craft craft:init <初期化クラス名> 初期化クラスの生成 craft:parameter <UNITパラメータクラス名> UNITパラメータクラスの生成 craft:protocol <プロトコルUNIT定義のクラス名> プロトコルUNIT定義のクラスとステータス名Enumの生成 craft:command <コマンドUNIT定義のクラス名> コマンドUNIT定義のクラスとキュー/ステータス名Enumの生成 craft:main <メイン処理のクラス名> メイン処理クラスの生成 craft:setting <設定ファイル名> 設定ファイルの生成 craft:locale <メッセージファイル名> メッセージファイルの生成 runtime runtime:init <初期化クラス名> 初期化クラスの生成 runtime:parameter <UNITパラメータクラス名> UNITパラメータクラスの生成 runtime:units <ランタイムUNIT定義のクラス名> ランタイムUNIT定義のクラスとキュー/ステータス名Enumの生成 runtime:main <メイン処理のクラス名> メイン処理クラスの生成
コマンドベースのインターフェースは Laravel との連携を考慮しているので、▶Laravelと連携するのページでその連携方法をご紹介しています。
連携後は Laravel のコマンドを使ってアプリを起動する事もできるので、Laravel のリソースを使った開発が可能になる事に加え、Web アプリとのオールインワン環境としても使えるようになります。
また、Laravel との連携後であっても当フレームワークのコマンドを使って引き続きアプリ開発が行えます。
おわりに
RuntimeManager で実装されたサービス管理ランチャーのプロジェクトもご用意していますので、開発を始める前にそちらの実装を参考にして頂けます。
また、開発を一から始められる新規開発環境もご用意しています。
また、開発を一から始められる新規開発環境もご用意しています。