Skip to content

Commit 21b1351

Browse files
v1.43.0 Release
ランタイムライブラリドキュメントの追加
1 parent 6ec7d47 commit 21b1351

8 files changed

Lines changed: 1947 additions & 0 deletions

File tree

css/common.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,12 @@ div.menu-dummy-for-minecraft
6363
height: 1000px;
6464
}
6565

66+
/* メニューエリアダミー(RuntimeManager) */
67+
div.menu-dummy-for-runtime
68+
{
69+
height: 1000px;
70+
}
71+
6672
/* タイトル */
6773
h1
6874
{

js/common.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ $(function()
101101
, '( app:[a-z-]+)': '<font class="pre-green">$1</font>'
102102
, '( craft[\\s])': '<font class="pre-yellow">$1</font>'
103103
, '( craft:[a-z-]+)': '<font class="pre-green">$1</font>'
104+
, '( runtime[\\s])': '<font class="pre-yellow">$1</font>'
105+
, '( runtime:[a-z-]+)': '<font class="pre-green">$1</font>'
104106
, '( laravel[\\s])': '<font class="pre-yellow">$1</font>'
105107
, '( laravel:[a-z-]+)': '<font class="pre-green">$1</font>'
106108
, '( Empty\\.\\.\\.[\\s])': '<font class="pre-blue">$1</font>'

runtime-manager/event-handler.html

Lines changed: 313 additions & 0 deletions
Large diffs are not rendered by default.

runtime-manager/index.html

Lines changed: 273 additions & 0 deletions
Large diffs are not rendered by default.

runtime-manager/init-class.html

Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
1+
<!DOCTYPE html>
2+
<html lang="ja">
3+
<head>
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1" />
6+
7+
<title>初期化クラスの実装 | RuntimeManager | SOCKET-MANAGER Framework For PHP</title>
8+
<meta name="description" content="ランタイムライブラリ(RuntimeManager)における初期化クラスの実装方法を解説。ログライター、緊急停止時のコールバック、UNITパラメータインスタンスなど、常駐型アプリ起動時に必要な機能の実装例を詳しく紹介。" />
9+
<meta content="SOCKET-MANAGER,RuntimeManager,ランタイムライブラリ,常駐型アプリ,イベントループ,コルーチン,ステータス管理,PHPフレームワーク" name="keywords">
10+
<link rel="canonical" href="https://socket-manager.github.io/document/runtime-manager/init-class.html" />
11+
12+
<script async src="https://www.googletagmanager.com/gtag/js?id=G-LF9W695NNW"></script>
13+
<script>
14+
window.dataLayer = window.dataLayer || [];
15+
function gtag(){dataLayer.push(arguments);}
16+
gtag('js', new Date());
17+
18+
gtag('config', 'G-LF9W695NNW');
19+
</script>
20+
<link rel="icon" href="https://socket-manager.github.io/document/favicon.ico" type="image/x-icon" />
21+
<link type="text/css" rel="stylesheet" href="../css/common.css" media="all" />
22+
<script src="../js/jquery-3.7.1.min.js"></script>
23+
<script type="text/javascript" src="../js/common.js"></script>
24+
<script type="application/ld+json">
25+
{
26+
"@context": "https://schema.org",
27+
"@type": "TechArticle",
28+
"headline": "ランタイムライブラリ(RuntimeManager) - 初期化クラスの実装ガイド",
29+
"description": "ランタイムライブラリ(RuntimeManager)における初期化クラスの実装方法を解説。ログライター、緊急停止時のコールバック、UNITパラメータインスタンスなど、常駐型アプリ起動時に必要な機能の実装例を詳しく紹介。",
30+
"keywords": "SOCKET-MANAGER, RuntimeManager, ランタイムライブラリ, 常駐型アプリ, イベントループ, コルーチン, ステータス管理, PHPフレームワーク",
31+
"articleSection": ["Technical Documentation", "Runtime Services", "PHP Programming"],
32+
"author": {
33+
"@type": "Person",
34+
"name": "SOCKET-MANAGER開発チーム"
35+
},
36+
"publisher": {
37+
"@type": "Organization",
38+
"name": "SOCKET-MANAGER",
39+
"logo": {
40+
"@type": "ImageObject",
41+
"url": "https://socket-manager.github.io/document/logo.png",
42+
"width": 355,
43+
"height": 50
44+
}
45+
},
46+
"mainEntityOfPage": {
47+
"@type": "TechArticle",
48+
"@id": "https://socket-manager.github.io/document/runtime-manager/init-class.html"
49+
},
50+
"url": "https://socket-manager.github.io/document/runtime-manager/init-class.html",
51+
"breadcrumb": {
52+
"@type": "BreadcrumbList",
53+
"itemListElement": [{
54+
"@type": "ListItem",
55+
"position": 1,
56+
"name": "Framework Top",
57+
"item": "https://socket-manager.github.io/document/"
58+
},{
59+
"@type": "ListItem",
60+
"position": 2,
61+
"name": "RuntimeManagerのご紹介",
62+
"item": "https://socket-manager.github.io/document/runtime-manager/"
63+
},{
64+
"@type": "ListItem",
65+
"position": 3,
66+
"name": "初期化クラスの実装",
67+
"item": "https://socket-manager.github.io/document/runtime-manager/init-class.html"
68+
}]
69+
},
70+
"isPartOf": {
71+
"@type": "WebSite",
72+
"name": "RuntimeManagerのご紹介",
73+
"url": "https://socket-manager.github.io/document/runtime-manager/"
74+
}
75+
}
76+
</script>
77+
</head>
78+
<body>
79+
<div class="layout">
80+
<div class="menu" role="navigation" aria-label="ページメニュー">
81+
<h2 class="menu-title">SOCKET-MANAGER</h2>
82+
<h4 class="menu-reference menu-page-title-bottom"><a href="../index.html">&gt;&gt; Framework Top</a></h4>
83+
<h2 class="menu-label">MAIN-MENU</h2>
84+
<div class="menu-text">
85+
86+
<h3 class="menu-page-title-link"><a href="./index.html">▶RuntimeManagerのご紹介</a></h3>
87+
88+
<h3 class="menu-page-title-link"><a href="./event-handler.html">▶イベントハンドラについて</a></h3>
89+
90+
</div>
91+
<h3 class="menu-label-sub">IMPLEMENT</h3>
92+
<div class="menu-text">
93+
94+
<h3 class="menu-page-title">▼初期化クラス</h3>
95+
96+
<ul>
97+
<li><a href="./init-class.html#begin">はじめに</a></li>
98+
</ul>
99+
<ul>
100+
<li><a href="./init-class.html#log">➤ログライター</a></li>
101+
</ul>
102+
<ul>
103+
<li><a href="./init-class.html#emergency">➤緊急停止コールバック</a></li>
104+
</ul>
105+
<ul>
106+
<li><a href="./init-class.html#parameter">➤UNITパラメータインスタンス</a></li>
107+
</ul>
108+
<ul>
109+
<li><a href="./init-class.html#last">おわりに</a></li>
110+
</ul>
111+
112+
<h3 class="menu-page-title-link"><a href="./unit-parameter.html">▶UNITパラメータクラス</a></h3>
113+
114+
<h3 class="menu-page-title-link"><a href="./runtime-unit.html">▶ランタイムUNITクラス</a></h3>
115+
116+
<h3 class="menu-page-title-link"><a href="./main.html">▶メイン処理クラス</a></h3>
117+
118+
</div>
119+
<h3 class="menu-label-sub">ADVANCED</h3>
120+
<div class="menu-text">
121+
122+
<h3 class="menu-page-title-link"><a href="./architecture.html">▶アーキテクチャ</a></h3>
123+
124+
<h3 class="menu-page-title-link"><a href="./laravel.html">▶Laravelと連携する</a></h3>
125+
126+
<h3 class="menu-page-title-link"><a href="./system-setting.html">▶システム設定ファイル</a></h3>
127+
128+
</div>
129+
<h3 class="menu-label-sub">PROJECT</h3>
130+
<div class="menu-text">
131+
132+
<h3 class="menu-page-title-link"><a href="./new-project.html">▶新規プロジェクト開発環境</a></h3>
133+
134+
<h3 class="menu-page-title-link"><a href="./websocket.html">▶Websocketサーバー開発環境</a></h3>
135+
136+
</div>
137+
<div class="menu-dummy-for-runtime"></div>
138+
</div>
139+
<div class="main" role="main">
140+
141+
<h1>【初期化クラスの実装】</h1>
142+
143+
<a id="begin"></a>
144+
<h2 class="subtitle">はじめに</h2>
145+
<div class="text-block">
146+
初期化クラスは、アプリ起動時に必要なデータ(UNITパラメータインスタンス)や処理(ログライター、緊急停止コールバック)を読み込むための実装を行うところで、専用のコマンドを使ってスキャフォールディングできます。SocketManagerクラスを使う場合に比べて、シリアライザーやコマンドディスパッチャーなどの実装は必要なくなりますので、より簡易的になります。<br /><br />
147+
148+
初期化クラスを生成するコマンドは以下の通り。<br />
149+
150+
<pre color-change="command" aria-label="コマンド実行(InitForTestというクラス名を指定する場合)">
151+
> php worker runtime:init InitForTest
152+
153+
[success] 初期化クラスの生成に成功しました (InitForTest)
154+
</pre><br />
155+
156+
コマンドを実行する事で<code>app/InitClass</code>の場所に<code>InitForTest</code>というクラス名で<code>IInitRuntimeManager</code>インターフェースをimplementsした初期化クラスが生成されます。<br /><br />
157+
158+
以降では生成されたクラス内で実装が必要なインターフェースメソッドの内訳を見ていきます。<br />
159+
</div><br />
160+
161+
<a id="log"></a>
162+
<h2 class="subtitle">➤ログライター</h2>
163+
<div class="text-block">
164+
error_logの標準関数やLoggerなどの有名なライブラリを使ってログを出力する事ができます。<br />
165+
イベントハンドラ(UNIT)内ではパラメータ経由で使いますので<code>$param->logWriter('debug', ['アプリ起動' => $message])</code>のように記述します。<br />
166+
167+
<pre aria-label="シグネチャ">
168+
【メソッド】getLogWriter(): Closure|string|null
169+
170+
【パラメータ】なし
171+
172+
【戻り値】
173+
Closure|string|null
174+
- ログ出力を行う場合: Closure
175+
パラメータ:
176+
$p_level - string - 必須 - ログレベル
177+
現状では以下のレベルが定義されています。
178+
debug
179+
info
180+
notice
181+
warning
182+
error
183+
$p_param - array - 必須 - 出力内容
184+
連想配列の形式で以下のように指定します。
185+
['メッセージ受信' => $message]
186+
戻り値: void
187+
- ログ出力を行う場合: string
188+
ヘルパー関数などの関数名
189+
- ログ出力を行わない場合: null
190+
</pre><br />
191+
192+
<pre color-change="php" aria-label="アプリログ保存の実装例(Closureタイプ)">
193+
public function getLogWriter()
194+
{
195+
return function(string $p_level, array $p_param)
196+
{
197+
// ファイル名を設定
198+
$filename = date('Ymd');
199+
200+
// 現在日付を含むログ内容を作成
201+
$now = date('Y-m-d H:i:s');
202+
$log = $now." {$p_level} ".print_r($p_param, true)."\n";
203+
204+
// ログ出力(カレントパスはプロジェクトルートになる)
205+
error_log($log, 3, "./logs/runtime-manager/{$filename}.log");
206+
};
207+
}
208+
</pre><br />
209+
210+
※カレントパスはプロジェクトルートになるので<code>./logs/debug.log</code>のように指定します。<br />
211+
※このメソッドはフレームワークのライブラリからもコールされますので、イベントハンドラのログも含めて時系列で出力されます。<br />
212+
</div><br />
213+
214+
<a id="emergency"></a>
215+
<h2 class="subtitle">➤緊急停止コールバック</h2>
216+
<div class="text-block">
217+
UNITで例外発生時に呼び出されるコールバックメソッドを実装します。<br />
218+
219+
<pre aria-label="シグネチャ">
220+
【メソッド】getEmergencyCallback(): Closure|string|null
221+
222+
【パラメータ】なし
223+
224+
【戻り値】
225+
Closure|string|null
226+
- 緊急停止コールバックを使う場合: Closure
227+
パラメータ:
228+
$p_param - RuntimeManagerParameter - 必須 - UNITパラメータクラスのインスタンス
229+
各イベントハンドラで共通の引数として使用されるインスタンス。
230+
RuntimeManagerParameterクラスを継承した拡張クラスを指定する事も可能。
231+
戻り値: なし
232+
- 緊急停止コールバックを使う場合: string
233+
ヘルパー関数などの関数名
234+
- 緊急停止コールバックを使わない場合: null
235+
</pre><br />
236+
237+
<pre color-change="php" aria-label="緊急停止時のファイルハンドルの後始末の例(Closureタイプ)">
238+
public function getEmergencyCallback()
239+
{
240+
return function(ParameterForRuntime $p_param)
241+
{
242+
// UNITパラメータクラスでファイルハンドルを管理している場合
243+
if(is_resource($p_param->dummy_fh))
244+
{
245+
fclose($p_param->dummy_fh);
246+
}
247+
};
248+
}
249+
</pre><br />
250+
</div><br />
251+
252+
<a id="parameter"></a>
253+
<h2 class="subtitle">➤UNITパラメータインスタンス</h2>
254+
<div class="text-block">
255+
UNITとしてのイベントハンドラを実行する時に渡されるUNITパラメータクラスのインスタンスを指定します。<br />
256+
基底クラスである<code>RuntimeManagerParameter</code>クラスのインスタンスがデフォルトで指定されていますが、このクラスを継承した拡張クラスを使用する場合はそのインスタンスを戻り値に指定する必要があります。<br />
257+
ここで指定したインスタンスはそのままUNITの引数として使われますので、動的に増殖してメモリを圧迫する心配はありません。<br />
258+
259+
<pre aria-label="シグネチャ">
260+
【メソッド】getUnitParameter(): RuntimeManagerParameter|null
261+
262+
【パラメータ】なし
263+
264+
【戻り値】RuntimeManagerParameter|null
265+
- UNITパラメータクラスを使う場合: RuntimeManagerParameter
266+
各イベントハンドラで共通の引数として使用されるインスタンス。
267+
RuntimeManagerParameterクラスを継承した拡張クラスを指定する事も可能。
268+
- UNITパラメータクラスを使わない場合: null
269+
</pre><br />
270+
271+
<pre color-change="php" aria-label="基底のUNITパラメータクラスを使う例">
272+
public function getUnitParameter(): ?RuntimeManagerParameter
273+
{
274+
return new RuntimeManagerParameter();
275+
}
276+
</pre><br />
277+
278+
※UNITパラメータクラスの詳細については<font><a href="./unit-parameter.html" target="_blank">▶UNITパラメータクラス</a></font>のページをご覧ください。<br />
279+
</div><br /><br />
280+
281+
<a id="last"></a>
282+
<h2 class="subtitle">おわりに</h2>
283+
<div class="text-block">
284+
生成されたクラスのインスタンスは、メイン処理クラス内で<code>$manager->setInitRuntimeManager()</code>メソッドに引き渡す事で適用されます。<br />
285+
複数の初期化クラスやメイン処理クラスを用意している場合は、アプリの実装内容によって最適なインスタンスを動的、あるいは静的に適用する事で柔軟なアプリ構築が可能になります。<br />
286+
</div>
287+
</div>
288+
</div>
289+
</body>
290+
</html>

0 commit comments

Comments
 (0)