【デモサーバーの種類】
はじめに
デモ環境で
このうち
以降ではシングルサーバーとマルチサーバーに分けて説明します。
php workerコマンドを実行すると以下のようなUsageが表示されます。
SOCKET-MANAGER Framework 1.0.0
Usage:
command [arguments]
main
app:minecraft-chat-server マインクラフト版チャットサーバー
app:tcpmulti-server TCPマルチチャットサーバー
app:tcpmulti-minecraft-server TCPマルチマインクラフト版チャットサーバー
app:udpmulti-server UDPマルチチャットサーバー
app:udpmulti-minecraft-server UDPマルチマインクラフト版チャットサーバー
app:chat-server チャットサーバー
craft
craft:init <初期化クラス名> 初期化クラスの生成
craft:parameter <UNITパラメータクラス名> UNITパラメータクラスの生成
craft:protocol <プロトコルUNIT定義のクラス名> プロトコルUNIT定義のクラスとステータス名Enumの生成
craft:command <コマンドUNIT定義のクラス名> コマンドUNIT定義のクラスとキュー/ステータス名Enumの生成
craft:main <メイン処理のクラス名> メイン処理クラスの生成
craft:setting <設定ファイル名> 設定ファイルの生成
craft:locale <メッセージファイル名> メッセージファイルの生成
このうち
mainの項目がサーバーの一覧になります。サーバーは全部で6種類あります。以降ではシングルサーバーとマルチサーバーに分けて説明します。
シングルサーバー
ここで述べているシングルサーバーというのはプロセス単体で動作するサーバーの事を指しています。
他のサーバーとの連携機能はありません。
以下のコマンドで実行できます。
デモの中でWebsocketを使ったサーバーとして一番オーソドックスなチャットサーバーです。
マインクラフトの機能は搭載していませんのでブラウザ間通信でのみ使えます。
以下のコマンドで実行できます。
他のサーバーとの連携機能はありません。
マインクラフト版チャットサーバー
Usageのmain項目にあるapp:minecraft-chat-serverに該当するもので▶フレームワークのご紹介のページでご紹介させて頂いたサーバーです。以下のコマンドで実行できます。
> php worker app:minecraft-chat-server 10000
チャットサーバー
Usageのmain項目にあるapp:chat-serverに該当するサーバーです。デモの中でWebsocketを使ったサーバーとして一番オーソドックスなチャットサーバーです。
マインクラフトの機能は搭載していませんのでブラウザ間通信でのみ使えます。
以下のコマンドで実行できます。
> php worker app:chat-server 10000
マルチサーバー
ここで述べているマルチサーバーというのは、親子関係がある複数のサーバー同士でサーバー(プロセス)間通信を通して連携し合っているサーバーの事を指しています。
このデモではWebsocket用で使うポート番号+10の値を親サーバー用のポート番号として使うというルールにしています。
Websocket+マインクラフト機能を搭載したTCPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
下の画面はサーバーを跨いでプライベート送信を行っている様子です。
Websocket機能を搭載したTCPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
マインクラフト機能は搭載していませんのでブラウザ間通信でのみ使えます。
それ以外はTCPマルチマインクラフト版チャットサーバーと同じです。
Websocket+マインクラフト機能を搭載したUDPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
画面の見た目はTCPマルチマインクラフト版チャットサーバーと全く同じですが、サーバー間通信にUDPを使用しています。
Websocket機能を搭載したUDPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
マインクラフト機能は搭載していませんのでブラウザ間通信でのみ使えます。
それ以外はUDPマルチマインクラフト版チャットサーバーと同じです。
このデモではWebsocket用で使うポート番号+10の値を親サーバー用のポート番号として使うというルールにしています。
TCPマルチマインクラフト版チャットサーバー
Usageのmain項目にあるapp:tcpmulti-minecraft-serverに該当するサーバーです。Websocket+マインクラフト機能を搭載したTCPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
> php worker app:tcpmulti-minecraft-server 10000 10010
> php worker app:tcpmulti-minecraft-server 20000 10010
下の画面はサーバーを跨いでプライベート送信を行っている様子です。
TCPマルチチャットサーバー
Usageのmain項目にあるapp:tcpmulti-serverに該当するサーバーです。Websocket機能を搭載したTCPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
> php worker app:tcpmulti-server 10000 10010
> php worker app:tcpmulti-server 20000 10010
マインクラフト機能は搭載していませんのでブラウザ間通信でのみ使えます。
それ以外はTCPマルチマインクラフト版チャットサーバーと同じです。
UDPマルチマインクラフト版チャットサーバー
Usageのmain項目にあるapp:udpmulti-minecraft-serverに該当するサーバーです。Websocket+マインクラフト機能を搭載したUDPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
> php worker app:udpmulti-minecraft-server 10000 10000
> php worker app:udpmulti-minecraft-server 20000 10000
画面の見た目はTCPマルチマインクラフト版チャットサーバーと全く同じですが、サーバー間通信にUDPを使用しています。
UDPマルチチャットサーバー
Usageのmain項目にあるapp:udpmulti-serverに該当するサーバーです。Websocket機能を搭載したUDPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
> php worker app:udpmulti-server 10000 10000
> php worker app:udpmulti-server 20000 10000
マインクラフト機能は搭載していませんのでブラウザ間通信でのみ使えます。
それ以外はUDPマルチマインクラフト版チャットサーバーと同じです。
ログ出力について
デモ版では以下のディレクトリ構成でログファイルが出力されます。
ファイルの命名規則は次の通り。
/logs
/chat-log チャット履歴
/socket-manager-log Websocket/マルチサーバーのログ
ファイルの命名規則は次の通り。
- ■チャット履歴
- <日付文字列("Ymd"形式)>_W<ポート番号>.log
- ■Websocketサーバーのログ
- <日付文字列("Ymd"形式)>_W<ポート番号>.log
- ■マルチサーバーのログ
- <日付文字列("Ymd"形式)>_<P(親サーバー) or C(子サーバー)><ポート番号>.log
おわりに
サーバー名に
それ以外のサーバーに接続しようとしても無反応かエラーになりますのでご注意ください。
マルチサーバーを使って複数のプロセスを起動する時はバッチやシェルを組んでおくと便利です。
あるいはプロセスIDを含める形でサーバーの情報をデータベースに登録して、起動ファイルや停止ファイルをPHPで作っておけば、
ただ複数のプロセスを起ち上げる時はバックグランド実行にしないと連続で起動がかかりません。
PowerShellでもバックグランド実行はできます。バージョン6以上をインストールしておけばLinuxのように
デモのコマンド仕様は▶デモのコマンド仕様ページでご覧ください。
minecraftという文字が含まれているものがマインクラフトで接続できるサーバーです。それ以外のサーバーに接続しようとしても無反応かエラーになりますのでご注意ください。
マルチサーバーを使って複数のプロセスを起動する時はバッチやシェルを組んでおくと便利です。
あるいはプロセスIDを含める形でサーバーの情報をデータベースに登録して、起動ファイルや停止ファイルをPHPで作っておけば、
exec関数で全サーバーの起動をかけたり、killコマンドで停止させる事も可能なので運用が楽になります。ただ複数のプロセスを起ち上げる時はバックグランド実行にしないと連続で起動がかかりません。
PowerShellでもバックグランド実行はできます。バージョン6以上をインストールしておけばLinuxのように
&(アンパサンド)を付けて実行する事も可能です。デモのコマンド仕様は▶デモのコマンド仕様ページでご覧ください。
