-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextra-demo-setting.html
More file actions
369 lines (293 loc) · 18.7 KB
/
extra-demo-setting.html
File metadata and controls
369 lines (293 loc) · 18.7 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
<!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フレームワークの設定ファイル(const.php, minecraft.php)の詳細解説。WebSocket/WSS通信、マルチサーバー構成、マインクラフト連携など、具体的な設定例とApacheの設定例を含めて紹介。" />
<meta content="PHP,ソケット通信,websocket,マイクラ,チャット,ソケットマネージャー" name="keywords">
<link rel="canonical" href="https://socket-manager.github.io/document/extra-demo-setting.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 - デモの設定ファイル",
"description": "SOCKET-MANAGERフレームワークデモ環境の設定ファイル(const.php, minecraft.php)の詳細解説。WebSocket/WSS通信、マルチサーバー構成、マインクラフト連携など、具体的な設定例とApacheの設定例を含めて紹介。",
"keywords": "PHP, WebSocket, WSS, SSL, マルチサーバー, ソケットマネージャー",
"articleSection": ["Technical Documentation", "Server Development", "PHP Programming"],
"image": "https://socket-manager.github.io/document/img/extra-demo-setting/client.png",
"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/extra-demo-setting.html"
},
"url": "https://socket-manager.github.io/document/extra-demo-setting.html",
"breadcrumb": {
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1,
"name": "Framework Top",
"item": "https://socket-manager.github.io/document/"
},{
"@type": "ListItem",
"position": 2,
"name": "デモの設定ファイル",
"item": "https://socket-manager.github.io/document/extra-demo-setting.html"
}]
},
"tutorial": {
"@type": "HowTo",
"name": "WSS通信の設定手順",
"step": [
{
"@type": "HowToStep",
"name": "設定ファイルの編集",
"text": "const.phpとminecraft.phpの設定"
},
{
"@type": "HowToStep",
"name": "Apacheの設定",
"text": "mod_proxyとSSL証明書の設定"
}
]
},
"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-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">▼デモの設定ファイル</h3>
<ul>
<li><a href="./extra-demo-setting.html#file">設定ファイルの内容</a></li>
</ul>
<ul>
<li><a href="./extra-demo-setting.html#wss">WSSでの接続について</a></li>
</ul>
<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="file"></a>
<h2 class="subtitle">設定ファイルの内容</h2>
<div class="text-block">
以下の設定ファイルはいずれもプロジェクトルートの<code>setting</code>ディレクトリに格納しています。<br />
<br />
<h3 class="underline">const.phpファイル</h3>
以下の設定はデモ環境に収録している6種類のサーバーで共通です。<br />
<pre color-change="php" aria-label="const.php(デモ環境の設定ファイル)">
return [
/**
* @var string ホスト名
*/
'host' => 'localhost',
/**
* @var int ポート番号(UDPマルチサーバーの親ポートと兼用)
*/
'port' => 10000,
/**
* @var int 周期インターバル時間(μs)
*/
'cycle_interval' => 1000,
/**
* @var int アライブチェックタイムアウト時間(s)
*/
'alive_interval' => 3600,
/**
* @var int 親ポート番号(TCPマルチサーバー用)
*/
'parent_port' => 10010,
];
</pre><br />
<dl>
<dt>■host</dt>
<dd>
サーバーのホスト名を指定します。デフォルトは<code>localhost</code>ですがリモート接続で利用する場合はこの部分を一意のホスト名かIPアドレスにする必要があります。<br />
リモート接続でwssのプロトコルを利用する事もあるでしょう。その場合は<font><a href="#wss">>> WSSでの接続について</a></font>の項目をご覧ください。
</dd>
<dt>■port</dt>
<dd>
Listenポートとして使うポート番号を指定します。UDPマルチサーバーの親サーバーとして使うポート番号と兼用しています。<br />
TCPを使うWebsocketとは異なりUDPを使うマルチサーバーではソケットリソースが異なるため同じポート番号が使えます。<br />
UDPマルチサーバーを使う場合、WebsocketサーバーとUDPマルチサーバーで使うポート番号が等しい場合に親サーバーだと判断しています。
</dd>
<dt>■cycle_interval</dt>
<dd>
ノンブロッキングループのインターバル時間をマイクロ秒(μs)単位で指定します。<br />
数値が大きければホストのロードアベレージが下がりますが処理は遅くなります。<br />
数値が小さければホストのロードアベレージが上がりますが処理は早くなります。<br />
リソース状況は利用するホストによってまちまちなため調整が必要になる事があります。
</dd>
<dt>■alive_interval</dt>
<dd>
アライブチェック(死活監視)のためのタイムアウト時間を秒単位で指定します。<br />
アライブチェック開始までの時間とチェック中のタイムアウト時間を兼用しています。<br />
Websocketサーバー上ではping/pongフレームを使用しています。
</dd>
<dt>■parent_port</dt>
<dd>
TCPマルチサーバーの親サーバーとして使うポート番号を指定します。<br />
TCPマルチサーバーはWebsocketサーバーで使うTCPとリソースが被るため異なるポート番号を使う必要があります。<br />
Websocketサーバーのポート番号+10の値がTCPマルチサーバーで使うポート番号と等しい場合に親サーバーだと判断しています。
</dd>
</dl>
※設定ファイルの内容はデフォルト値として作用しますのでコマンドラインで入力された値が優先されます。<br />
※<code>parent_port</code>を除いては基本的にWebsocket開発環境も設定内容は同じです。<br />
<br /><br />
<h3 class="underline">minecraft.phpファイル</h3>
以下の設定はマインクラフト用のファイルとしてご用意しているものです。<br />
<pre color-change="php" aria-label="minecraft.php(マインクラフト用設定ファイル)">
return [
/**
* @var array 設定するサブスクライブタイプ(複数指定可)
*/
'subscribe_types' =>
[
'PlayerMessage'
]
];
</pre><br />
<dl>
<dt>■subscribe_types</dt>
<dd>
サブスクライブイベントの種類を指定します。初期の状態では"PlayerMessage"を登録していますが配列形式で複数指定可能です。<br />
サブスクライブイベントの処理内容については<font><a href="./extra-minecraft.html#send">▶マインクラフトの通信仕様(マインクラフトへの送信データ)</a></font>をご覧ください。
</dd>
</dl>
</div><br />
<a id="wss"></a>
<h2 class="subtitle">WSSでの接続について</h2>
<div class="text-block">
デモ環境やWebsocket開発環境に実装しているWebsocketサーバーには暗号化APIを実装していませんのでそのままではWSS接続を利用できません。<br />
そのため別途リバースプロキシサーバーをご用意して頂く事で利用できるようになります。<br /><br />
例えばApacheの場合、以下のような設定を追加して頂く事で利用できるようになります。<br />
<pre aria-label="Apacheの設定ファイル">
・
・
・
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
・
・
・
<VirtualHost _default_:443>
・
・
・
SSLProxyEngine On
ProxyPreserveHost On
ProxyPass / ws://localhost:10000
ProxyPassReverse / ws://localhost:10000
・
・
・
</VirtualHost>
・
・
・
</pre><br />
※ローカルのルート証明書を使って接続確認は行っています。<br />
※マインクラフトの場合は接続できなかったのでどうやらルート証明書を使っているわけではないようです。WSS接続の際は専用のサーバーを使っている可能性があるので注意が必要です。<br /><br />
クライアントの画面は今まで通りブラウザへのドラッグ&ドロップで使えますが、WebsocketAPIの向き先を以下のように変更する事で利用できます。<br />
<div class="img-block">
<a href="./img/extra-demo-setting/client.png" target="_blank"><img src="./img/extra-demo-setting/client.png" width="772" height="718" loading="lazy" alt="WebSocketサーバーのWSS接続画面 - SOCKET-MANAGER Framework" /></a>
</div>
</div><br />
</div>
</div>
</body>
</html>