-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
750 lines (606 loc) · 53 KB
/
index.html
File metadata and controls
750 lines (606 loc) · 53 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
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>フレームワークのご紹介 | SOCKET-MANAGER Framework For PHP</title>
<meta name="description" content="SOCKET-MANAGER Framework は、TCP/UDP/WebSocket/REST-API などを統一アーキテクチャで扱う PHP 向けリアルタイム通信フレームワークです。ステートマシン内蔵のイベントループにより、状態破壊のない堅牢な非同期処理を実現。90,000 接続の高速処理と、CPU割当なし・128MBで 100,000 同時接続を維持する実運用スケール性能を公開し、プロトコル非依存の開発基盤を提供します。" />
<meta name="keywords" content="SOCKET-MANAGER, PHP Framework, リアルタイム通信, WebSocket, TCP, UDP, REST-API, ステートマシン, 非同期処理, イベントループ, プロトコル抽象化, IPC, マルチサーバー, 高性能サーバー, 100,000接続, スケールベンチマーク, CUEIアーキテクチャ, 統一I/F" />
<link rel="canonical" href="https://socket-manager.github.io/document/" />
<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": "WebSite",
"name": "SOCKET-MANAGER Framework 公式ページ",
"headline": "SOCKET-MANAGER Framework - Unified Architecture for Realtime & RESTful Services",
"description": "SOCKET-MANAGER Framework は、TCP/UDP/WebSocket/REST-API などを統一アーキテクチャで扱う PHP 向け通信フレームワークです。90,000 接続を 30 秒で処理するハイパフォーマンスモードに加え、CPU割当なし・128MBで 100,000 同時接続を維持する実運用スケールベンチマークも公開。高スループット・低レイテンシ・軽量性を両立したリアルタイム通信基盤を提供します。",
"keywords": "SOCKET-MANAGER, PHP Framework, WebSocket, TCP, UDP, REST-API, RESTful-API, ステートマシン, イベントループ, ハイパフォーマンスモード, 高性能サーバー, 90000接続, リアルタイム通信, IPC, マルチサーバー, 依存性注入, ストラテジーパターン, 100,000同時接続, スケールベンチマーク, 実運用性能, スループット, 低レイテンシ, 軽量フレームワーク",
"image": "https://socket-manager.github.io/document/img/index/demo.gif",
"articleSection": [
"Framework Overview",
"Unified Architecture",
"State Machine",
"Realtime Communication",
"Protocol Abstraction",
"WebSocket / TCP / UDP",
"REST-API / RESTful-API",
"High Performance Mode",
"Real-world Scale Benchmark",
"Event Loop & Coroutine",
"IPC / Multi-Server Architecture",
"CUEI / CUEI-O Model",
"Laravel Integration",
"Low-latency Architecture",
"High Throughput Benchmark"
],
"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/"
},
"url": "https://socket-manager.github.io/document/",
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"name": "Framework Top",
"item": "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">▼フレームワークのご紹介</h3>
<ul>
<li><a href="./#begin">はじめに</a></li>
</ul>
<ul>
<li><a href="./#menu">メニュー構成</a></li>
</ul>
<ul>
<li><a href="./#specification">主要機能一覧</a></li>
</ul>
<ul>
<li><a href="./#philosophy">Philosophy(設計思想)</a></li>
</ul>
<ul>
<li><a href="./#contrast">他構成と特徴の違い</a></li>
</ul>
<ul>
<li><a href="./#feature">フレームワークとしての特徴</a></li>
</ul>
<ul>
<li><a href="./#demo">デモ画面</a></li>
</ul>
<ul>
<li><a href="./#env">デモ確認環境</a></li>
</ul>
<ul>
<li><a href="./#install">インストール</a></li>
</ul>
<ul>
<li><a href="./#run">動作確認</a></li>
</ul>
<ul>
<li><a href="./#last">おわりに</a></li>
</ul>
<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="./architecture.html">▶アーキテクチャ</a></h3>
<h3 class="menu-page-title-link"><a href="./event.html">▶イベント駆動アーキテクチャ</a></h3>
<h3 class="menu-page-title-link"><a href="./ipc.html">▶IPC(プロセス間通信)</a></h3>
<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="./custom-command.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">▶実運用スケールベンチマーク</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>【フレームワークのご紹介】</h1>
<a id="begin"></a>
<h2 class="subtitle">はじめに</h2>
<div class="text-block">
SOCKET-MANAGER Framework(ソケットマネージャーフレームワーク)は、プロトコルに依存しない柔軟なネットワーク基盤と、コマンドベースでのプロジェクト構築機能を統合した、通信アプリケーション開発のためのオールインワン環境です。<br />
TCP・UDP・WebSocket・独自プロトコルなどの通信方式を統一されたアーキテクチャで取り扱えるほか、Laravelとの連携を通じてWebアプリケーションとの融合的な運用も可能です。<br />
このページでは、フレームワークの構成と主要機能をご紹介します。<br />
<br />
SOCKET-MANAGER Framework は、リアルタイム通信だけでなく<strong>REST-API / RESTful-API サーバー開発にも正式対応</strong>しています。<br />
PSR-7準拠のHTTPメッセージ処理と、フレームワーク本体にビルトインされた<strong>ステートマシン</strong>により、Chunked Transfer・SSE・Range送信など、状態遷移を伴うAPI処理を効率的に実装できます。<br />
<br />
また、本フレームワークは、90,000 接続を 30 秒で処理する純粋性能と、CPU割当なし・128MBで 100,000 同時接続を維持する実運用性能の両方を備えています。<br />
スループット・低レイテンシ・軽量性・堅牢性の四要素を高いレベルで両立しています。<br />
</div><br />
<a id="menu"></a>
<h2 class="subtitle">メニュー構成</h2>
<div class="text-block">
ここではサーバー開発を行う際に必要な情報を、左メニューのカテゴリに分けてご紹介しています。<br />
以下はそのメニューカテゴリの説明です。<br />
<br />
<h3 class="underline">MAIN-MENU</h3>
このフレームワークの概要や事前知識も含め、実装に必要な情報を公開しています。<br />
また、以下のサブカテゴリもございます。<br />
<dl>
<dt>・IMPLEMENT</dt>
<dd>
実装のメインとなるコマンドを使ったコーディング方法を各コマンドごとにご紹介しています。<br /><br />
</dd>
<dt>・ADVANCED</dt>
<dd>
マルチサーバーの構築方法やLaravelとの連携方法など、より高度な使い方をご紹介しています。<br /><br />
</dd>
<dt>・OTHER-PROJECT</dt>
<dd>
実装を始める時に利用可能なデモ版を除くプロジェクト環境をご紹介しています。<br />
</dd>
</dl>
<br />
<h3 class="underline">EXTRA-MENU</h3>
デモ版の追加情報やWebsocketプロトコルの切断フレームに関する情報など実装には直接関係しない補足的な情報を掲載しています。<br />
<br />
<h3 class="underline">PHP-TECHNIQUE</h3>
このフレームワークに関する技術情報を提供しています。<br />
</div><br />
<a id="specification"></a>
<h2 class="subtitle">主要機能一覧</h2>
<div class="text-block">
当フレームワークが提供する主要な機能と特徴について一覧で示します。これらの機能により、高度なスケーラビリティと柔軟な実装が可能となります。<br />
<table style="background-color: ivory; border-collapse: collapse; width: 80%; margin: 20px auto auto 0px; border: 1px solid #dcd3b2;"
aria-label="フレームワーク機能一覧"
role="table">
<caption style="caption-side: top; text-align: left; padding: 12px; font-weight: bold;">
システム仕様詳細
</caption>
<thead>
<tr style="background-color: #f5f0dc;">
<th scope="col" style="padding: 12px; border: 1px solid #dcd3b2; text-align: left;">項目</th>
<th scope="col" style="padding: 12px; border: 1px solid #dcd3b2; text-align: left;">内容</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">実装形態</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">コマンドベースのスキャフォールディング(標準実装/デベロッパーによる追加構築不要)</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">非同期モデル</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">独自仕様のイベントループ / コルーチン対応(ステータス維持したまま処理を中断可能)</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">通信方式</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">TCP / UDP / WebSocket / 独自プロトコル対応</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">IPC形態</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">INETソケットを利用し、異なるプロトコルの共存が可能</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">スケールアップ</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">プロセス単位で可能(ポート変更による動的調整)</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">スケールアウト</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">プロセス単位で可能(複数サーバー間で負荷分散)</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">プラットフォーム</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">PHP が動作する環境であれば利用可能(Windows / Linux で動作確認済み)</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">REST-API 対応</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">PSR-7準拠のREST-API / RESTful-APIサーバー開発に対応。イベントハンドラ型・ステートマシン型の2方式を選択可能。</td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #dcd3b2; font-weight: bold;">ステートマシン</th>
<td style="padding: 10px; border: 1px solid #dcd3b2;">フレームワーク本体にビルトイン。Chunked Transfer・SSE・Range送信など、状態遷移を伴うAPI処理を確実に制御。</td>
</tr>
</tbody>
</table>
<br />
<h3 class="underline">ハイパフォーマンスモード(High Performance Mode)</h3>
<p>
SOCKET-MANAGER Framework には、独自 IO ドライバと同期ランタイムを組み合わせた<strong>ハイパフォーマンスモード</strong>が搭載されています。<br />
WebSocket 接続 <strong>90,000 を 30 秒で処理</strong>し、10,000 接続維持でも<strong>128MB 内に収まる軽量メモリフットプリント</strong>を実現。<br />
Windows / Linux のどちらでも同じコードで動作し、リアルタイム通信に必要な<strong>高性能・堅牢性・再現性</strong>を両立しています。
</p>
<p>
▶ 詳細はこちら:<a class="embedded-link" href="./high-performance.html">>> ハイパフォーマンスモード</a>
</p>
<h3 class="underline">実運用スケールベンチマーク(Real-world Scale Benchmark)</h3>
<p>
CPU割当なし・メモリ128MBという実運用に近い条件で、
WebSocket <strong>100,000 同時接続</strong>を維持しながら、
ラウンド間隔なしの連続負荷でも安定動作を確認しています。<br />
高負荷時でも <strong>平均 0.55ms の低レイテンシ</strong> を維持し、
<strong>18,000〜20,000 rps 相当の実効スループット</strong>(10,000 接続あたり 1,800〜2,000 rps)の処理性能を発揮するなど、
スループット・低レイテンシ・軽量性の三要素を高いレベルで両立しています。
</p>
<p>
▶ 詳細はこちら:
<a class="embedded-link" href="./scale-test.html">>> 実運用スケールベンチマーク</a>
</p><br />
<div style="padding: 1em; background-color: #fefefe; border-left: 4px solid #dcd3b2; color: #333; font-size: 0.95rem; line-height: 1.6; width: 77%; margin: 20px auto auto 0px;">
<h3 style="margin-top: 0; font-size: 1.1rem; color: #2c3e50;">🧭 その他の特長</h3>
<ul style="padding-left: 1.2em; margin: 0;">
<li><strong>依存性の排除:</strong>外部サービスやサードパーティ製ライブラリに依存せず、単独で動作可能</li>
<li><strong>独自イベントループ/コルーチン:</strong>プロセスやスレッドに頼らず通信制御を実現</li>
<li><strong>設定の柔軟性:</strong>設定ファイルや翻訳リソースの柔軟な切り替えと管理</li>
<li><strong>軽量な導入:</strong>PHP(v8.1.0以降)とsocketsモジュールのみで動作する、シンプルなセットアップ</li>
</ul>
</div>
</div><br />
<a id="philosophy"></a>
<h2 class="subtitle">Philosophy(設計思想)</h2>
<div class="text-block">
SOCKET-MANAGER Framework の中心にあるのは、単なる高速化や軽量化ではなく、
<strong>「プロトコルに依存しない統一アーキテクチャ」</strong> と
<strong>「状態破壊のない堅牢な実行基盤」</strong> を実現するという思想です。<br /><br />
多くのリアルタイムソリューションが WebSocket や TCP の性能を中心に語られる一方で、
本フレームワークは <strong>ステートマシン(UNIT / Queue モデル)</strong> を
フレームワーク本体にビルトインすることで、通信方式の違いを越えた
<strong>統一的な開発体験</strong> を提供します。<br /><br />
このステートマシンにより、非同期処理中の状態破壊を防ぎ、
WebSocket・TCP・UDP・REST-API といった異なる通信方式を
<strong>同じインターフェースで安全に扱える</strong>ようになります。<br /><br />
また、統一I/Fを採用したことで、CLIスキャフォールディングや
カスタムコマンド生成などの自動化も可能となり、
開発から運用までを一貫して支える <strong>CUEI/O モデル</strong> を形成しています。<br /><br />
<strong>「高速であること」よりも「壊れないこと」。</strong><br />
SOCKET-MANAGER は、現実の運用環境で長時間動き続けるための
新しいリアルタイム基盤を目指しています。<br />
</div><br />
<a id="contrast"></a>
<h2 class="subtitle">他構成と特徴の違い</h2>
<div class="text-block">
<table style="background-color: #fdfdfb; border-collapse: collapse; width: 100%; margin: 24px auto; border: 1px solid #ccc;" aria-label="他ソリューションとの比較">
<caption style="caption-side: top; text-align: left; padding: 12px; font-weight: bold;">類似ソリューションとの特長比較(一般的な実装との対比)</caption>
<thead>
<tr style="background-color: #f0f0e8;">
<th scope="col" style="padding: 12px; border: 1px solid #ccc; text-align: left;">項目</th>
<th scope="col" style="padding: 12px; border: 1px solid #ccc; text-align: left;">一般的な構成例</th>
<th scope="col" style="padding: 12px; border: 1px solid #ccc; text-align: left;">本フレームワークの特長</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #ccc;">プロトコル処理</th>
<td style="padding: 10px; border: 1px solid #ccc;">通信処理とアプリロジックが一体化して実装されることが多い</td>
<td style="padding: 10px; border: 1px solid #ccc;"><strong>抽象インターフェースにより、TCP/UDP/WebSocketなどを自由に切り替え可能</strong></td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #ccc;">ビジネスロジックの構造</th>
<td style="padding: 10px; border: 1px solid #ccc;">通信処理に強く依存しており、移植・再利用が難しい</td>
<td style="padding: 10px; border: 1px solid #ccc;"><strong>プロトコル層とは別クラスとしてモジュール化、処理単位で入れ替え可能</strong></td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #ccc;">非同期制御</th>
<td style="padding: 10px; border: 1px solid #ccc;">スレッド/プロセス中心の並行処理設計</td>
<td style="padding: 10px; border: 1px solid #ccc;"><strong>独自イベントループ/コルーチンにより、スレッドレスかつ軽量に状態管理</strong></td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #ccc;">複数構成の共存</th>
<td style="padding: 10px; border: 1px solid #ccc;">1アプリで1構成が基本。複数構成は別プロセスが前提</td>
<td style="padding: 10px; border: 1px solid #ccc;"><strong>プロトコル/ロジックを組み合わせた多数インスタンスを同一プロセス内で待機・共存</strong></td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #ccc;">開発インターフェース</th>
<td style="padding: 10px; border: 1px solid #ccc;">構成ごとに設計思想・処理分離が異なる場合が多い</td>
<td style="padding: 10px; border: 1px solid #ccc;"><strong>プロトコル/ビジネスロジックともに共通の開発インターフェースで構築可能</strong></td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #ccc;">初期構築の手間</th>
<td style="padding: 10px; border: 1px solid #ccc;">雛形作成や構成設計に工数がかかりがち</td>
<td style="padding: 10px; border: 1px solid #ccc;"><strong>専用スキャフォールディングにより、必要構成を即時生成可能</strong></td>
</tr>
<tr>
<th scope="row" style="padding: 10px; border: 1px solid #ccc;">REST-API 実装</th>
<td style="padding: 10px; border: 1px solid #ccc;">一般的なイベント駆動型ソリューションでは、ChunkedやSSEの分割送信が安定しない場合がある</td>
<td style="padding: 10px; border: 1px solid #ccc;"><strong>ステートマシンによりChunked/SSE/Range送信を確実に制御。REST-API / RESTful-APIに最適化された実装が可能</strong></td>
</tr>
</tbody>
</table>
<h3 style="font-size: 1.1rem; color: #2c3e50; margin-bottom: 0.5em;">📘 構成イメージ</h3>
<p style="font-size: 0.96rem; color: #333; line-height: 1.6;">
以下は、1プロセス内で複数のプロトコル(例:TCP/UDP)と異なるビジネスロジックを共存させた代表的な構成例です。いずれも共通のイベントループ上で動作しており、高い柔軟性と一貫性を両立する設計になっています。また、コンテキストを通して相手のリソースを操作したり、送受信メソッドを使って任意のデータを相手側のクライアントへ直接送信したり、受信データを設定させる事もできます。
</p>
<a href="./img/index/diagram.png" target="_blank"><img src="./img/index/diagram.png" width="500px" loading="lazy" alt="1プロセス内で複数のプロトコル(例:TCP/UDP)と異なるビジネスロジックを共存させた代表的な構成例" /></a><br />
</div><br />
<div class="text-block" style="margin-top: 20px;">
この構成例が成立する背景には、SOCKET-MANAGER Framework が採用する
<strong>共通イベントループ(ステートマシン内蔵型)</strong>の存在があります。<br /><br />
フレームワーク内部では、すべてのプロトコル処理・コマンド処理が
<strong>UNIT / Queue / Module</strong> の三層ステートマシン上で統一的に管理されており、
非同期処理中の割り込みや状態破壊を防ぎながら、複数モジュールを安全に共存させることができます。<br /><br />
このイベント駆動モデルの詳細については、
<font><a href="./event.html">▶イベント駆動アーキテクチャ</a></font> を参照してください。
</div>
<div class="text-block" style="margin-top: 20px;">
また、本フレームワークが採用するステートマシン基盤やストラテジーパターンによる依存性注入(DI)は、複数プロトコルの共存やモジュール分離を可能にし、マイクロサービス構成との高い親和性を実現します。<br /><br />
これらの思想がどのように IPC(プロセス間通信)や Launcher による統合管理へ発展するのかについては、<font><a href="./ipc.html">▶IPC(プロセス間通信)</a></font> のページで詳しく解説しています。<br /><br />
なお、依存性注入やステートマシンの設計思想については、PHP-FIG の PSR 標準仕様も参考になります:<br />
・PSR-7(HTTP Message Interface): <a href="https://www.php-fig.org/psr/psr-7/" target="_blank">https://www.php-fig.org/psr/psr-7/</a><br />
・PSR-11(Container Interface): <a href="https://www.php-fig.org/psr/psr-11/" target="_blank">https://www.php-fig.org/psr/psr-11/</a><br />
・PSR-14(Event Dispatcher): <a href="https://www.php-fig.org/psr/psr-14/" target="_blank">https://www.php-fig.org/psr/psr-14/</a>
</div><br />
<div class="text-block" style="margin-top: 20px;">
本フレームワークの非同期処理やステートマシンの詳細については、
<a class="embedded-link" href="./event-handler.html">>> イベントハンドラについて</a>
にて詳しく解説しています。
</div><br />
<a id="feature"></a>
<h2 class="subtitle">フレームワークとしての特徴</h2>
<div class="text-block">
本フレームワークは、WebSocket/TCP/UDP に加えて<strong>REST-API / RESTful-API サーバー開発にも対応</strong>しています。<br />
PSR-7準拠のHTTPメッセージ処理と、ビルトインのステートマシンにより、Chunked Transfer や SSE などの分割送信処理を安定して実装できます。<br /><br />
さらに、SOCKET-MANAGER Framework は CUEI/O アーキテクチャに基づいて設計されており、通信・共有基盤・非同期処理・サーバー間通信(CUEI)に加えて、Launcher による運用フェーズ(/O)まで一貫して統合管理できる点も大きな特徴です。<br /><br />
サーバーアプリを開発するツールと言えば一般にライブラリ形式で提供されているものが多い印象ですが、このフレームワークでは頻繁に書くような慣習的なコーディング部分をコマンド操作で概ね補えるようになっています。<br />
以下のようにフレームワークコマンドのUsageを表示すると、サーバーの実装に必要なコマンド群がそれぞれ main、craft、runtime、simple カテゴリに分けて表示されます。<br />
<pre aria-label="Usageの表示" color-change="command">
> php worker
SOCKET-MANAGER Framework 1.X.X
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 <メイン処理のクラス名> メイン処理クラスの生成
simple
simple:tcp-server <メイン処理のクラス名> TCPサーバー用メイン処理クラスの生成
simple:tcp-client <メイン処理のクラス名> TCPクライアント用メイン処理クラスの生成
simple:udp <メイン処理のクラス名> UDP通信用メイン処理クラスの生成
</pre><br />
例えば、メイン処理を作成してインスタンス化し、サーバーを起動するまでの手順は以下2ステップのコマンドで完結します。<br />
<br />
<h3 class="underline">①メイン処理の作成</h3>
<code>php worker craft:main <メイン処理クラス名></code>というコマンドを使ってメイン処理クラスのひな形を作成します。<br />
今回の場合は<code>MainForTest</code>というクラス名を指定。<br />
<pre aria-label="コマンド実行" color-change="command">
> php worker craft:main MainForTest
[success] メイン処理クラスの生成に成功しました (MainForTest)
</pre><br />
生成されたクラスは<code>app/MainClass</code>の場所に格納されます。<br />
<br />
<h3 class="underline">②サーバーを起動</h3>
<code>php worker</code>コマンドを使って<code>app:main-for-test</code>というサーバー名を指定して起動。<br />
(サーバー名はキャメルケースをスネークケースに変換して先頭に<code>app:</code>を付与したものになります)<br />
今回の場合はポート番号10000番で起動。<br />
<pre aria-label="コマンド実行" color-change="command">
> php worker app:main-for-test 10000
</pre><br />
これでホスト名'localhost'(デフォルト)の10000ポートをListenポートとしてサーバーが起動します。(<code>Ctrl+C</code>で停止します)<br /><br />
また、<code>php worker</code>を実行して再度Usageを表示すると、先ほど生成したサーバーの名前が<code>main</code>カテゴリへ追加されているのが確認できます。<br />
<pre aria-label="コマンド実行" color-change="command">
> php worker
SOCKET-MANAGER Framework 1.X.X
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 <メイン処理のクラス名> メイン処理クラスの生成
simple
simple:tcp-server <メイン処理のクラス名> TCPサーバー用メイン処理クラスの生成
simple:tcp-client <メイン処理のクラス名> TCPクライアント用メイン処理クラスの生成
simple:udp <メイン処理のクラス名> UDP通信用メイン処理クラスの生成
</pre><br />
コマンドベースのインターフェースはLaravelとの連携を考慮しているので、<font><a href="./laravel.html" target="_blank">▶Laravelと連携する</a></font>のページでその連携方法をご紹介しています。<br />
連携後はLaravelのコマンドを使ってサーバーを起動する事もできるので、Laravelのリソースを使った開発が可能になる事に加え、Webアプリとのオールインワン環境としても使えるようになります。<br />
また、Laravelとの連携後であっても当フレームワークのコマンドを使って引き続きサーバー開発が行えます。<br /><br />
SOCKET-MANAGER Framework では、ビルトインコマンドに加えてプロジェクト固有の処理を CLI コマンドとして追加できる<font><a href="./custom-command.html">▶カスタムコマンド作成機能</a></font>も提供しています。<br />
スキャフォールディングの自動化や、チーム開発での共通タスクの統一、REST API や IPC を伴うステートマシンユニットの雛形生成など、開発効率を大きく向上させる拡張ポイントです。<br /><br />
<br />
<h3 class="underline">リアルタイム通信に最適化された高性能 IO ドライバ</h3>
<p>
本フレームワークには、FFI + 独自拡張による高速 IO と、select ベースの互換モードを自動切替する<strong>ハイパフォーマンスモード</strong>が組み込まれています。<br />
同期ランタイムの一貫性を保ちながら大量接続を安定処理できるため、チャット・IoT・ゲーム・監視システムなどのリアルタイム用途に最適です。<br />
</p>
<p>
▶ 高性能アーキテクチャの詳細:<a class="embedded-link" href="./high-performance.html">>> ハイパフォーマンスモード</a>
</p><br />
以降では、デモ環境のご紹介とプロジェクト環境のインストール方法をご紹介していますので、開発を始める前にまずはそちらをご覧ください。<br />
</div><br />
<a id="demo"></a>
<h2 class="subtitle">デモ画面</h2>
<div class="img-block">
<a href="./img/index/demo.gif" target="_blank"><img class="img-zoomout" src="./img/index/demo.gif" fetchpriority="high" loading="eager" alt="SOCKET-MANAGER Framework - マインクラフトとブラウザ間のチャットデモ" /></a>
</div>
<div class="text-block">
これはWebsocketサーバーを使ってマインクラフトとブラウザ間でチャットを行っている様子です。<br />
通常のコメント発信とプライベート送信(マインクラフト側はウィスパー機能で実装)に対応しています。<br /><br />
一部例外はありますが、マインクラフトやほとんどのWebブラウザにはWebsocket通信の機能が実装されていますので、Websocketサーバーを通じてこのデモのようにWebブラウザ⇔マインクラフト間で通信を行う事が可能です。<br />
(ブラウザのWebsocket機能はそのまま使えますので別途モジュールを適用する必要はありません)<br /><br />
以降ではデモサーバーのインストールとブラウザやマインクラフトからのアクセス方法をご紹介しています。
</div><br />
<a id="env"></a>
<h2 class="subtitle">デモ確認環境</h2>
<div class="text-block">
以下の構成はあくまで動作確認時の環境です。<br />
事前にインストールが必要なのはPHPとComposerのみです。<br />
<br />
<dl>
<dt>プラットフォーム</dt>
<dd>Windows10</dd>
<dt>統合環境</dt>
<dd>Xampp v3.3.0</dd>
<dt>マインクラフト</dt>
<dd>Windows Edition v1.20.73</dd>
<dt>ブラウザ</dt>
<dd>Chrome v123.0.6312.123</dd>
<dt>言語</dt>
<dd>PHP v8.2.4(v8.1.0以降)</dd>
<dt>Composer</dt>
<dd>v2.6.5</dd>
</dl>
</div><br />
<a id="install"></a>
<h2 class="subtitle">インストール</h2>
<div class="text-block">
あらかじめPHP8.1.0以降とComposerがインストールされているものとします。<br /><br />
<h3 class="underline">拡張モジュールの適用</h3>
ライブラリを利用するにはまずsockets拡張モジュールを適用する必要がありますが既に入っている場合はこの項目は読み飛ばしてください。<br /><br />
※ここではXAMPP環境を使っている前提で説明していますが、デフォルトとは別の場所に格納している場合やLinux等の別の環境で利用されている場合は適宜読み替えてください。<br /><br />
php.ini内のモジュール定義がコメントアウトされている場合はコメントをはずして有効にする。<br />
<img src="./img/index/php-extension.png" width="255px" loading="lazy" alt="SOCKET-MANAGER Framework - php.ini内のモジュール定義箇所" /><br /><br />
以下のコマンドを実行してenabledになっている事を確認。<br />
<pre aria-label="PowerShellで確認" color-change="command">
> php -i | Select-String -pattern 'Sockets Support'
Sockets Support => enabled
</pre><br />
これで拡張モジュールであるsocketsが有効になりました。<br /><br />
※PHPの拡張モジュールの詳細については<font><a href="https://www.php.net/manual/ja/index.php" target="_blank">>> 公式ページ</a></font>をご覧ください。<br /><br />
<br />
<h3 class="underline">Composerでインストール</h3>
今回のデモ環境は以下のコマンドでインストールできます。<br />
※GitHubから直接ダウンロードする場合は<font><a href="https://github.com/socket-manager/demo-project" target="_blank">>> こちら</a></font>からどうぞ。<br />
<pre aria-label="デモ版のインストール" color-change="command">
> composer create-project socket-manager/demo-project <インストール先のディレクトリ名>
</pre><br />
</div><br />
<a id="run"></a>
<h2 class="subtitle">動作確認</h2>
<div class="text-block">
冒頭でご紹介したデモ版を動かしてみます。<br /><br />
<h3 class="underline">サーバーサイドの準備</h3>
プロジェクトルートで以下のコマンドを実行するだけで準備完了です。<br />
<pre aria-label="サーバーの起動(10000ポートで起動する場合)" color-change="command">
> php worker app:minecraft-chat-server 10000
</pre><br />
<h3 class="underline">クライアント(ブラウザ)の準備</h3>
インストールしたプロジェクトには以下のディレクトリにjQuery/React版のHTMLファイルが入っていますのでお好きな方をブラウザにドラッグ&ドロップしてください(Webサーバーを起動する必要はありません)。<br />
<pre aria-label="クライアントのファイル">
/app/client/jquery/chat.html(jQuery版)
/app/client/react/chat.html(React版)
</pre><br />
<h3 class="underline">クライアント(マインクラフト)の準備</h3>
マインクラフトはUWPアプリのため以下のコマンドを実行してループバックアドレスへのアクセスを許可しておく必要があります。<br />
<pre aria-label="ループバックアドレス許可の設定" color-change="command">
> CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.MinecraftUWP_8wekyb3d8bbwe"
</pre><br />
マインクラフトから接続する時は冒頭のデモのように以下の形式で入力します。<br />
<pre aria-label="マインクラフトからの接続" color-change="command">
> /wsserver localhost:10000/<ユーザー名>
</pre><br />
上記のユーザー名はマインクラフト内のユーザー名でなくても構いません。<br />
あくまでデモ版のサーバー内で使用する名前です。<br /><br />
マインクラフトからは以下のように#でメンションを付ける事でプライベート送信ができます。<br />
<pre aria-label="マインクラフトからのプライベート送信" color-change="command">
> <メッセージ>#<ユーザー名>
</pre><br />
マインクラフトから退室する時は×ボタンで閉じてください。
</div><br />
<a id="last"></a>
<h2 class="subtitle">おわりに</h2>
<div class="text-block">
一応マインクラフトからの退室コマンドもご用意していますが現状での使用はお勧めできません。<br />
<pre aria-label="マインクラフトからの退室コマンド" color-change="command">
> $exit
</pre><br />
上記コマンドで退室してもマインクラフト側から再接続がかかったり、再接続時に失敗する事が頻繁にあります。<br />
マインクラフトの切断処理の検証内容については<font><a href="./extra-close-frame.html#minecraft" target="_blank">▶切断フレームの検証⇒マインクラフトの場合</a></font>のページでまとめています。<br /><br />
今回ご紹介させて頂いたのはデモサーバーの一部ですが、その他のサーバーについては<font><a href="./extra-demo.html" target="_blank">▶デモサーバーの種類</a></font>のページでご紹介しています。<br /><br />
ホスト名やポート番号等の設定ファイルの詳細は<font><a href="./extra-demo-setting.html" target="_blank">▶デモの設定ファイル</a></font>のページでまとめています。
</div>
</div>
</div>
</body>
</html>