【RuntimeManagerのご紹介】
はじめに
SOCKET-MANAGER Framework に新たに加わった「RuntimeManager」は、SocketManager の高性能なイベントループ/コルーチン基盤を継承しつつ、ソケット通信を省いた常駐型アプリ専用のランタイムライブラリです。
本機能では、UNIT 単位による処理設計と、CPU 資源への適切な配慮を可能にする実行モデルにより、ビジネスロジックの安定かつ効率的な常駐処理が実現されます。
さらに、専用スキャフォールディングコマンド群により、実装の初期段階から明快かつ迅速なコード構築が可能となります。
このページでは、RuntimeManager で利用できるフレームワークの特徴を中心にご紹介します。
本機能では、UNIT 単位による処理設計と、CPU 資源への適切な配慮を可能にする実行モデルにより、ビジネスロジックの安定かつ効率的な常駐処理が実現されます。
さらに、専用スキャフォールディングコマンド群により、実装の初期段階から明快かつ迅速なコード構築が可能となります。
このページでは、RuntimeManager で利用できるフレームワークの特徴を中心にご紹介します。
メニュー構成
ここでは常駐型アプリ開発を行う際に必要な情報を、左メニューのカテゴリに分けてご紹介しています。
以下はそのメニューカテゴリの説明です。
また、以下のサブカテゴリもございます。
以下はそのメニューカテゴリの説明です。
MAIN-MENU
RuntimeManager が利用するフレームワークの概要や事前知識も含め、実装に必要な情報を公開しています。また、以下のサブカテゴリもございます。
- ・IMPLEMENT
-
実装のメインとなるコマンドを使ったコーディング方法を各コマンドごとにご紹介しています。
- ・ADVANCED
-
Laravel との連携方法など、より高度な使い方をご紹介しています。
- ・PROJECT
-
実装を始める時に利用可能な以下2つのプロジェクト環境をご紹介しています。
- ・新規開発環境
-
新しいプロジェクトで常駐型アプリを開発するための基本環境です。
- ・フレームワークのDevOps環境
-
SOCKET-MANAGER Launcherが導入されたDevOps環境です。
新規開発環境として利用できるほか、Launcher自体がSocketManager(WebSocketサーバー)とRuntimeManager(ランチャー本体)を用いた実装であるため、RuntimeManagerの具体的な利用例としても参考になります。
フレームワークとしての特徴
常駐型アプリを開発するツールと言えば一般にライブラリ形式で提供されているものが多い印象ですが、このフレームワークでは頻繁に書くような慣習的なコーディング部分をコマンド操作で概ね補えるようになっていて、
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 で実装された▶GUI & CLI ランチャーのプロジェクトもご用意していますので、開発を始める前にそちらの実装を参考にして頂けます。
また、開発を一から始められる新規開発環境もご用意しています。
また、開発を一から始められる新規開発環境もご用意しています。