-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathipc.html
More file actions
560 lines (439 loc) · 33.1 KB
/
ipc.html
File metadata and controls
560 lines (439 loc) · 33.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>IPC(プロセス間通信 / Inter-Process Communication) | SOCKET-MANAGER Framework For PHP</title>
<meta name="description" content="CUEI の “IPC” が示すプロセス間通信の指針と、SOCKET-MANAGER Framework による実装方式を解説。UNIT / Queue / Module の統一モデルをそのままプロセス間に拡張し、専用ミドルウェアを必要としない高速・低レイテンシ IPC を実現。" />
<meta name="keywords" content="SOCKET-MANAGER, IPC, プロセス間通信, INET ベース, 高速 IPC, ネイティブ IO, ハイパフォーマンスモード, SimpleSocket, SocketManager, RuntimeManager, CUEI, イベント駆動, PHP フレームワーク, マイクロサービス, 非同期処理, モジュール共存" />
<link rel="canonical" href="https://socket-manager.github.io/document/ipc.html" />
<script async src="https://www.googletagmanager.com/gtag/js?id=G-LF9W695NNW"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-LF9W695NNW');
</script>
<link rel="icon" href="https://socket-manager.github.io/document/favicon.ico" type="image/x-icon" />
<link type="text/css" rel="stylesheet" href="./css/common.css" media="all" />
<script src="./js/jquery-3.7.1.min.js"></script>
<script type="text/javascript" src="./js/common.js"></script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "SOCKET-MANAGER Framework - IPC(プロセス間通信 / Inter-Process Communication)",
"description": "CUEI の “IPC” が示すプロセス間通信の指針と、SOCKET-MANAGER Framework による実装方式を解説。UNIT / Queue / Module の統一モデルをそのままプロセス間に拡張し、専用ミドルウェアを必要としない高速・低レイテンシ IPC を実現。",
"keywords": "SOCKET-MANAGER, IPC, プロセス間通信, INET ベース, 高速 IPC, ネイティブ IO, ハイパフォーマンスモード, SimpleSocket, SocketManager, RuntimeManager, CUEI, イベント駆動, PHP フレームワーク, マイクロサービス, 非同期処理, モジュール共存",
"articleSection": [
"Introduction to IPC",
"Module Structure and IPC",
"IPC as a Unified Communication Model",
"CUEI Element Correlation",
"Dependency Injection and Strategy Pattern",
"Microservice Compatibility",
"Launcher Integration",
"SimpleSocket Usage",
"IPC Examples",
"Business Logic Isolation",
"REST-API Integration",
"Conclusion"
],
"author": {
"@type": "Person",
"name": "SOCKET-MANAGER開発チーム"
},
"publisher": {
"@type": "Organization",
"name": "SOCKET-MANAGER",
"logo": {
"@type": "ImageObject",
"url": "https://socket-manager.github.io/document/logo.png",
"width": 355,
"height": 50
}
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://socket-manager.github.io/document/ipc.html"
},
"url": "https://socket-manager.github.io/document/ipc.html",
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"name": "Framework Top",
"item": "https://socket-manager.github.io/document/"
},{
"@type": "ListItem",
"position": 2,
"name": "IPC(プロセス間通信 / Inter-Process Communication)",
"item": "https://socket-manager.github.io/document/ipc.html"
}]
},
"isPartOf": {
"@type": "WebSite",
"name": "フレームワークのご紹介",
"url": "https://socket-manager.github.io/document/"
}
}
</script>
</head>
<body>
<div class="layout">
<div class="menu" role="navigation" aria-label="ページメニュー">
<h2 class="menu-title">SOCKET-MANAGER</h2>
<h4 class="menu-reference menu-page-title-bottom"><a href="./reference/" target="_blank">>> Reference</a></h4>
<h2 class="menu-label">MAIN-MENU</h2>
<div class="menu-text">
<h3 class="menu-page-title-link"><a href="./">▶フレームワークのご紹介</a></h3>
<h3 class="menu-page-title-link"><a href="./event-handler.html">▶イベントハンドラについて</a></h3>
</div>
<h3 class="menu-label-sub">IMPLEMENT</h3>
<div class="menu-text">
<h3 class="menu-page-title-link"><a href="./init-class.html">▶初期化クラス</a></h3>
<h3 class="menu-page-title-link"><a href="./unit-parameter.html">▶UNITパラメータクラス</a></h3>
<h3 class="menu-page-title-link"><a href="./protocol-unit.html">▶プロトコルUNITクラス</a></h3>
<h3 class="menu-page-title-link"><a href="./command-unit.html">▶コマンドUNITクラス</a></h3>
<h3 class="menu-page-title-link"><a href="./main.html">▶メイン処理クラス</a></h3>
<h3 class="menu-page-title-link"><a href="./setting.html">▶設定ファイル</a></h3>
<h3 class="menu-page-title-link"><a href="./message.html">▶メッセージファイル</a></h3>
</div>
<div class="menu-line"></div>
<div class="menu-text">
<h3 class="menu-page-title-link-for-runtime-manager"><a href="./runtime-manager/" target="_blank">>> ランタイムライブラリ</a></h3>
<h3 class="menu-page-title-link-for-runtime-manager"><a href="./simple-socket/" target="_blank">>> シンプルソケット機能</a></h3>
</div>
<h3 class="menu-label-sub">ADVANCED</h3>
<div class="menu-text">
<h3 class="menu-page-title-link"><a href="./concept.html">▶設計コンセプト</a></h3>
<h3 class="menu-page-title-link"><a href="./architecture.html">▶アーキテクチャ</a></h3>
<h3 class="menu-page-title-link"><a href="./communication.html">▶通信抽象化</a></h3>
<h3 class="menu-page-title-link"><a href="./union.html">▶共有基盤</a></h3>
<h3 class="menu-page-title-link"><a href="./event.html">▶イベント駆動アーキテクチャ</a></h3>
<h3 class="menu-page-title">▼IPC(プロセス間通信)</h3>
<ul>
<li><a href="./ipc.html#begin">はじめに</a></li>
</ul>
<ul>
<li><a href="./ipc.html#module">モジュール構造と IPC の関係</a></li>
</ul>
<ul>
<li><a href="./ipc.html#concept">IPC を特別扱いしない思想</a></li>
</ul>
<ul>
<li><a href="./ipc.html#cuei-ipc">CUEI各要素との相関関係</a></li>
</ul>
<ul>
<li><a href="./ipc.html#strategy">依存性注入と戦略パターン</a></li>
</ul>
<ul>
<li><a href="./ipc.html#microservice">マイクロサービスとの親和性</a></li>
</ul>
<ul>
<li><a href="./ipc.html#launcher">Launcher 統合管理</a></li>
</ul>
<ul>
<li><a href="./ipc.html#simple">SimpleSocket の横断的利用</a></li>
</ul>
<ul>
<li><a href="./ipc.html#example">IPC の実例</a></li>
</ul>
<ul>
<li><a href="./ipc.html#clean">ビジネスロジックが汚れない</a></li>
</ul>
<ul>
<li><a href="./ipc.html#rest">REST-API 環境との関係</a></li>
</ul>
<ul>
<li><a href="./ipc.html#last">おわりに</a></li>
</ul>
<h3 class="menu-page-title-link"><a href="./multi-server.html">▶マルチサーバーの構成</a></h3>
<h3 class="menu-page-title-link"><a href="./tcp-and-udp.html">▶TCP/UDP通信について</a></h3>
<h3 class="menu-page-title-link"><a href="./laravel.html">▶Laravelと連携する</a></h3>
<h3 class="menu-page-title-link"><a href="./system-setting.html">▶システム設定ファイル</a></h3>
<h3 class="menu-page-title-link"><a href="./system-setting.html">▶カスタムコマンド作成機能</a></h3>
<h3 class="menu-page-title-link"><a href="./high-performance.html">▶ハイパフォーマンスモード</a></h3>
<h3 class="menu-page-title-link"><a href="./scale-test.html">▶WebSocket スケール性能</a></h3>
<h3 class="menu-page-title-link"><a href="./pure-tcp-scale.html">▶純粋 TCP スケール性能</a></h3>
<h3 class="menu-page-title-link"><a href="./itil.html">▶技術版 ITIL としての CUEI/O</a></h3>
</div>
<h3 class="menu-label-sub">OTHER-PROJECT</h3>
<div class="menu-text">
<h3 class="menu-page-title-link"><a href="./new-project.html">▶新規開発環境</a></h3>
<h3 class="menu-page-title-link"><a href="./websocket.html">▶Websocketサーバー開発環境</a></h3>
<h3 class="menu-page-title-link"><a href="./dev-ops.html">▶フレームワークのDevOps環境</a></h3>
</div>
<div class="menu-line"></div>
<div class="menu-text">
<h3 class="menu-page-title-link-for-minecraft"><a href="./minecraft-contents/" target="_blank">>> マインクラフト専用環境</a></h3>
<h3 class="menu-page-title-link-for-launcher"><a href="./launcher/" target="_blank">>> GUI & CLI ランチャー</a></h3>
<h3 class="menu-page-title-link-for-rest-api"><a href="./rest-api/" target="_blank">>> REST-APIサーバー開発環境</a></h3>
</div>
<h2 class="menu-label">EXTRA-MENU</h2>
<div class="menu-text">
<h3 class="menu-page-title-link"><a href="./extra-demo.html">▶デモサーバーの種類</a></h3>
<h3 class="menu-page-title-link"><a href="./extra-demo-command.html">▶デモのコマンド仕様</a></h3>
<h3 class="menu-page-title-link"><a href="./extra-demo-setting.html">▶デモの設定ファイル</a></h3>
<h3 class="menu-page-title-link"><a href="./extra-minecraft.html">▶マインクラフトの通信仕様</a></h3>
<h3 class="menu-page-title-link"><a href="./extra-close-frame.html">▶切断フレームの検証</a></h3>
</div>
<h2 class="menu-label">PHP-TECHNIQUE</h2>
<div class="menu-text">
<h3 class="menu-page-title-link"><a href="./php-pass-by-reference.html">▶参照渡し</a></h3>
<h3 class="menu-page-title-link"><a href="./php-phpdoc.html">▶PHPDocのフォーマット</a></h3>
</div>
<div class="menu-dummy-for-framework"></div>
</div>
<div class="main" role="main">
<h1>【IPC(プロセス間通信 / Inter-Process Communication)】</h1>
<a id="begin"></a>
<h2 class="subtitle">はじめに(CUEI の “I” が示す IPC の指針)</h2>
<div class="text-block">
<br />
<h3 class="underline">IPC の位置づけ(CUEI の I が求めるもの)</h3>
<a class="embedded-link" href="./architecture.html#begin">CUEI アーキテクチャ</a>における
<strong>I(IPC)</strong> は、
「複数プロセス間での通信を、通常の通信方式と同じ抽象モデルで扱えること」
を指針としています。<br /><br />
CUEI の I が求めるのは、専用ミドルウェアや特別なプロトコルではなく、
<strong>既存の通信抽象化(C)とイベント駆動(E)をそのままプロセス間に拡張できる構造</strong> です。<br /><br />
この指針は技法を縛るものではありませんが、以下の要件を満たすことが求められます。<br /><br />
<ul>
<li>IPC を通常の通信モジュールと同じ抽象モデルで扱えること</li>
<li>プロセス間通信のために特別な仕組みを追加しなくてよいこと</li>
<li>イベント駆動アーキテクチャ(E)の上で自然に動作すること</li>
<li>共有基盤(U)のコンテキスト設計と矛盾しないこと</li>
</ul>
<br />
<h3 class="underline">SOCKET-MANAGER Framework における実装方針</h3>
SOCKET-MANAGER Framework は、TCP / UDP / WebSocket / 独自プロトコルといった
<strong>異なる通信方式を同一プロセス内で共存させる</strong> という特徴的なアーキテクチャを持っています。<br /><br />
この構造は単なる「複数プロトコル対応」ではなく、
<strong>IPC(プロセス間通信)を特別扱いせずに自然に実現できる</strong> という大きな利点につながります。<br /><br />
本フレームワークでは、この CUEI の指針を
<strong>UNIT / Queue / Module の統一モデルをそのままプロセス間に拡張する</strong>
という形で具現化しています。<br /><br />
本ページでは、CUEI の I(IPC)に相当するこのプロセス間通信が
SOCKET-MANAGER Framework の中でどのように設計されているかを解説します。<br /><br />
フレームワーク全体の構成や主要機能については、
<font><a href="./">▶フレームワークのご紹介</a></font> をご覧ください。<br />
</div><br />
<a id="module"></a>
<h2 class="subtitle">モジュール構造と IPC の関係</h2>
<div class="text-block">
SOCKET-MANAGER Framework は、
<a class="embedded-link" href="./event.html">イベント駆動アーキテクチャ</a>で説明しているように
<strong>UNIT(処理単位)/Queue(状態遷移)/Module(機能単位)</strong>
の三層構造で成り立っています。<br /><br />
この三層構造の上で、フレームワーク本体には次の
<strong>「モジュール管理クラス」</strong> が存在します。<br /><br />
<ul>
<li><strong>SocketManager</strong>(プロトコル部・コマンド部を統合管理)</li>
<li><strong>RuntimeManager</strong>(ランタイム UNIT 群を管理)</li>
<li><strong>SimpleSocketGenerator</strong>(SimpleSocket 系列を生成)</li>
</ul>
これらは「Module」そのものではなく、
<strong>複数の UNIT / Queue を束ねて管理する上位レイヤーのクラス</strong> です。<br /><br />
<h3 class="underline">UNIT / Queue を利用する管理クラスと、利用しない管理クラス</h3>
<strong>SocketManager</strong><br />
・プロトコル部:プロトコル処理を担う Queue の集合<br />
・コマンド部:サーバーコンテンツ処理を担う Queue の集合<br />
→ <strong>UNIT / Queue を前提としたステートマシン構造</strong><br /><br />
<strong>RuntimeManager</strong><br />
・ランタイム UNIT:常駐型アプリの処理を担う Queue の集合<br />
→ <strong>UNIT / Queue を前提としたステートマシン構造</strong><br /><br />
<strong>SimpleSocketGenerator</strong><br />
・SimpleSocketTcpServer / SimpleSocketTcpClient / SimpleSocketUdp を生成<br />
→ <strong>UNIT / Queue を必要としない軽量通信モジュールを生成</strong><br /><br />
このように、
<strong>SocketManager と RuntimeManager はステートマシン上で動作する UNIT / Queue の集合体</strong> であり、
<strong>SimpleSocket 系列はステートマシンに依存しない軽量通信モジュール</strong> です。<br /><br />
これらの管理クラスが生成するモジュールは
<strong>同一プロセス内で自由に組み合わせて動作</strong> できるため、<br />
IPC(プロセス間通信)も「特別な仕組み」ではなく、
<strong>必要なモジュールを複数プロセスに配置するだけで自然に成立する通信形態</strong> として扱えます。<br />
</div><br />
<a id="concept"></a>
<h2 class="subtitle">IPC を“特別扱いしない”という設計思想と INET ベース高速通信</h2>
<div class="text-block">
一般的なフレームワークでは、IPC は以下のように「別世界」として扱われがちです。<br /><br />
<ul>
<li>専用の IPC ライブラリ</li>
<li>専用のメッセージング層</li>
<li>専用のプロトコル</li>
<li>専用のハンドラ</li>
</ul>
しかし SOCKET-MANAGER Framework では、
<strong>IPC も通常の通信モジュールの一つ</strong> として扱います。<br /><br />
つまり、
<strong>IPC 専用の仕組みを作らなくても、通常の通信モジュールを複数プロセスに配置するだけで IPC が成立する</strong>
という構造になっています。<br /><br />
この設計により、外部ミドルウェアに依存せず
<strong>INET ベースの軽量な通信経路をそのまま利用できるため、プロセス間で高速かつ低レイテンシなデータ転送が可能</strong>
になります。<br /><br />
専用ブローカーやメッセージング層を経由しないため遅延要因が少なく、
<strong>リアルタイム性が求められる用途にも適した IPC 基盤</strong> を実現しています。<br />
</div><br />
<a id="cuei-ipc"></a>
<h2 class="subtitle">CUEI 各要素との相関関係</h2>
<div class="text-block">
IPC(プロセス間通信)は本フレームワークの CUEI アーキテクチャにおける
<strong>I(IPC)</strong> の役割を担う要素です。<br /><br />
SOCKET-MANAGER Framework では、プロトコル部とコマンド部が
CycleDrivenManager により統一インターフェースで扱われるため、
IPC も通常の通信モジュールと同じ抽象モデルで実現できます。<br /><br />
また、イベント駆動アーキテクチャ(E)の上で動作するため、
<strong>サーバー本体のモジュールと IPC モジュールを同じイベントループ内で共存</strong>
させることが可能です。<br /><br />
<ul>
<li><strong>C(Communication)</strong>:プロトコル部が抽象化され、IPC も通常通信と同じモデルで扱える</li>
<li><strong>U(Union)</strong>:共有基盤(UNITパラメータ)がプロセス間でも統一的に利用される</li>
<li><strong>E(Event)</strong>:複数モジュールを同一イベントループで安全に共存させる</li>
<li><strong>I(IPC)</strong>:追加の仕組みなしでプロセス間通信を構成できる</li>
</ul><br />
IPC が INET ベースで動作するため、
<strong>CUEI の I はリアルタイム性の高い通信基盤として機能</strong> します。<br /><br />
イベントループとステートマシンによる E(Event)の詳細については、
<font><a href="./event.html">▶イベント駆動アーキテクチャ</a></font> を参照してください。<br />
</div><br />
<a id="strategy"></a>
<h2 class="subtitle">依存性注入と戦略パターン</h2>
<div class="text-block">
フレームワーク本体は、
<strong>ストラテジーパターンを基盤とした依存性注入(DI)</strong> を採用しています。<br /><br />
これにより、以下のような柔軟な構成が可能になります。<br /><br />
<ul>
<li>プロトコル部・コマンド部をクラス単位で自由に差し替え</li>
<li>同一インターフェースで複数モジュールを共存</li>
<li>IPC 用モジュールを必要なプロセスにだけ注入</li>
</ul>
この DI 構造は、IPC を「後付けの特殊機能」ではなく、
<strong>モジュール構成の一部として自然に扱える</strong> という大きな利点を生みます。<br /><br />
なお、依存性注入(DI)やインターフェース設計の思想については、
PHP-FIG が策定する PSR-11(Container Interface)も参考になります:<br />
<a href="https://www.php-fig.org/psr/psr-11/" target="_blank" rel="noopener">https://www.php-fig.org/psr/psr-11/</a><br />
</div><br />
<a id="microservice"></a>
<h2 class="subtitle">マイクロサービスとの親和性</h2>
<div class="text-block">
モジュールをプロセス単位で自由に構成できるため、
SOCKET-MANAGER Framework は
<strong>マイクロサービスアーキテクチャと非常に相性が良い</strong> という特徴があります。<br /><br />
<ul>
<li>サービスごとに異なるプロトコルを採用可能</li>
<li>IPC モジュールを介してサービス間通信を統一</li>
<li>プロセス単位でスケールアウトが容易</li>
<li>Launcher による複数サーバーの一元管理</li>
</ul>
これらはすべて、
<strong>UNIT / Queue / Module</strong> という統一抽象モデルがあるからこそ成立する設計です。<br /><br />
また、イベント駆動型のサービス連携という観点では、
PSR-14(Event Dispatcher)も関連する設計思想として参考になります:<br />
<a href="https://www.php-fig.org/psr/psr-14/" target="_blank" rel="noopener">https://www.php-fig.org/psr/psr-14/</a><br />
</div><br />
<a id="launcher"></a>
<h2 class="subtitle">Launcher 統合管理</h2>
<div class="text-block">
SOCKET-MANAGER Launcher は、フレームワーク本体と同じく
<strong>UNIT / Queue を基盤としたステートマシン構造</strong> を採用しています。<br /><br />
そのため、サービス群を Launcher から統一的に管理でき、
<strong>システム全体をステータス管理対象として扱える</strong> という強みがあります。<br /><br />
<ul>
<li>各サービスの起動・停止・再起動を一元管理</li>
<li>サービスごとのステータスを統一フォーマットで監視</li>
<li>IPC を利用したサービス間連携を俯瞰的に把握</li>
<li>サービス群を「統合ステートマシン」として運用可能</li>
</ul>
Launcher は CUEI/O アーキテクチャにおける
<strong>“/O(Operation)”</strong> に該当し、
開発フェーズで統合された CUEI の要素を
<strong>運用フェーズで統合的に管理する役割</strong> を担います。<br /><br />
CUEI/O 全体の構造については、
<font><a href="./architecture.html">▶アーキテクチャ</a></font> を参照してください。<br />
</div><br />
<a id="simple"></a>
<h2 class="subtitle">SimpleSocket の横断利用</h2>
<div class="text-block">
SimpleSocket は以下の 2 つの使い方ができます。<br /><br />
<h3 class="underline">1. 独立モジュールとして動作</h3>
Launcher のカスタムモニタリング機能がこの例です。<br /><br />
<h3 class="underline">2. 他モジュールの UNIT 内で動作</h3>
<code>$ctx->simple_socket</code> により、
SocketManager や RuntimeManager の UNIT 内から
SimpleSocket の送受信機能を直接利用できます。<br /><br />
SimpleSocket は UNIT / Queue を必要としないためオーバーヘッドが少なく、
<strong>IPC の高速化や軽量な補助通信に適したモジュール</strong> として利用できます。<br />
</div><br />
<a id="example"></a>
<h2 class="subtitle">IPC の実例</h2>
<div class="text-block">
フレームワークのデモでは、Minecraft 統合版(Bedrock Edition)との連携を含む
以下の IPC 構成を実現しています。<br /><br />
<ul>
<li>TCP 版 IPC</li>
<li>UDP 版 IPC</li>
<li>Web ブラウザ同士の宛先指定メッセージ送受信</li>
<li>Web ブラウザ ⇔ Minecraft 統合版 間の宛先指定メッセージ送受信</li>
</ul>
Minecraft 側では、ゲーム内の <strong>「/w(whisper)」</strong> 機能を利用してプレイヤーへ通知を行っています。<br /><br />
Minecraft 統合版の公式ドキュメントはこちら:<br />
<a href="https://learn.microsoft.com/ja-jp/minecraft/creator/" target="_blank" rel="noopener">
Minecraft 統合版クリエイタードキュメント
</a><br /><br />
これらはすべて、
<strong>IPC 専用の仕組みではなく、通常の通信モジュールを複数プロセスに配置しただけ</strong>
で成立しています。<br />
</div><br />
<a id="clean"></a>
<h2 class="subtitle">ビジネスロジックが汚れない理由</h2>
<div class="text-block">
IPC をモジュールとしてカプセル化できるため、
ビジネスロジック側は以下のメリットを得ます。<br /><br />
<ul>
<li>IPC の実装がアプリロジックに混ざらない</li>
<li>モジュール単位で差し替え可能</li>
<li>テストや保守が容易</li>
<li>プロトコル変更にも強い</li>
</ul>
これは <strong>UNIT / Queue / Module</strong> という
統一された抽象モデルがあるからこそ実現できる設計です。<br />
</div><br />
<a id="rest"></a>
<h2 class="subtitle">REST-API との関係</h2>
<div class="text-block">
REST-API 環境では、SocketManager の特定構成をプリセット化しているため、
IPC の実装方法は REST-API 側の
<font><a href="./rest-api/parallel.html" target="_blank" rel="noopener">▶Parallelクラス実装</a></font>
ページで説明しています。<br /><br />
本ページでは、
<strong>フレームワーク本体としての IPC の思想と構造</strong> を扱います。
</div><br />
<a id="last"></a>
<h2 class="subtitle">おわりに</h2>
<div class="text-block">
IPC は SOCKET-MANAGER Framework のアーキテクチャから自然に導かれる仕組みであり、
特別なミドルウェアや専用プロトコルを必要としない点が大きな特徴です。<br /><br />
モジュールを複数プロセスに配置するだけで IPC が成立し、
SimpleSocket を利用した軽量かつ高速な通信も同一イベントループ内で実現できます。<br /><br />
さらに、IPC は「通信モジュールの一つ」として扱えるため、
<strong>
ハイパフォーマンスモード(FFI + 独自 IO ドライバ)と組み合わせることで、
プロセス間通信でもネイティブ IO による高速性をそのまま享受できます。
</strong><br />
これは、外部ブローカーを経由しない INET ベース IPC の強みと相性が良く、
大量接続・高頻度メッセージングでも低レイテンシを維持できる構造です。<br /><br />
ハイパフォーマンスモードの詳細は
<font><a href="./high-performance.html">▶ハイパフォーマンスモード</a></font>
をご覧ください。<br /><br />
また、CUEI/O アーキテクチャや Launcher による統合管理と組み合わせることで、
マルチサーバー構成・サービス連携・リアルタイム処理など、
より高度なシステム構築にも柔軟に対応できます。<br /><br />
追加の構成例や応用的な設計については、
ADVANCED カテゴリの各ページをご参照ください。<br />
</div><br />
</div>
</div>
</body>
</html>