【デモサーバーの種類】

はじめに

デモ環境でphp workerコマンドを実行すると以下のようなUsageが表示されます。
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種類あります。
以降ではシングルサーバーとマルチサーバーに分けて説明します。

シングルサーバー

ここで述べているシングルサーバーというのはプロセス単体で動作するサーバーの事を指しています。
他のサーバーとの連携機能はありません。

マインクラフト版チャットサーバー

Usageのmain項目にあるapp:minecraft-chat-serverに該当するもので▶フレームワークのご紹介のページでご紹介させて頂いたサーバーです。
以下のコマンドで実行できます。
サーバーの起動形式(10000ポートで起動する場合)
> php worker app:minecraft-chat-server 10000
                    

チャットサーバー

Usageのmain項目にあるapp:chat-serverに該当するサーバーです。
デモの中でWebsocketを使ったサーバーとして一番オーソドックスなチャットサーバーです。
マインクラフトの機能は搭載していませんのでブラウザ間通信でのみ使えます。
以下のコマンドで実行できます。
サーバーの起動形式(10000ポートで起動する場合)
> php worker app:chat-server 10000
                    

マルチサーバー

ここで述べているマルチサーバーというのは、親子関係がある複数のサーバー同士でサーバー(プロセス)間通信を通して連携し合っているサーバーの事を指しています。
このデモではWebsocket用で使うポート番号+10の値を親サーバー用のポート番号として使うというルールにしています。

TCPマルチマインクラフト版チャットサーバー

Usageのmain項目にあるapp:tcpmulti-minecraft-serverに該当するサーバーです。
Websocket+マインクラフト機能を搭載したTCPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
親サーバーの起動形式(Websocketのポート番号=10000、サーバー間通信用のポート番号=10010で起動する場合)
> php worker app:tcpmulti-minecraft-server 10000 10010
                    
子サーバーの起動形式(Websocketのポート番号=20000、サーバー間通信用のポート番号=10010で起動する場合)
> php worker app:tcpmulti-minecraft-server 20000 10010
                    

下の画面はサーバーを跨いでプライベート送信を行っている様子です。

TCPマルチチャットサーバー

Usageのmain項目にあるapp:tcpmulti-serverに該当するサーバーです。
Websocket機能を搭載したTCPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
親サーバーの起動形式(Websocketのポート番号=10000、サーバー間通信用のポート番号=10010で起動する場合)
> php worker app:tcpmulti-server 10000 10010
                    
子サーバーの起動形式(Websocketのポート番号=20000、サーバー間通信用のポート番号=10010で起動する場合)
> php worker app:tcpmulti-server 20000 10010
                    

マインクラフト機能は搭載していませんのでブラウザ間通信でのみ使えます。
それ以外はTCPマルチマインクラフト版チャットサーバーと同じです。

UDPマルチマインクラフト版チャットサーバー

Usageのmain項目にあるapp:udpmulti-minecraft-serverに該当するサーバーです。
Websocket+マインクラフト機能を搭載したUDPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
親サーバーの起動形式(Websocketのポート番号=10000、サーバー間通信用のポート番号=10000で起動する場合)
> php worker app:udpmulti-minecraft-server 10000 10000
                    
子サーバーの起動形式(Websocketのポート番号=20000、サーバー間通信用のポート番号=10000で起動する場合)
> php worker app:udpmulti-minecraft-server 20000 10000
                    

画面の見た目はTCPマルチマインクラフト版チャットサーバーと全く同じですが、サーバー間通信にUDPを使用しています。

UDPマルチチャットサーバー

Usageのmain項目にあるapp:udpmulti-serverに該当するサーバーです。
Websocket機能を搭載したUDPによるサーバー間通信機能を有しているサーバーです。
以下は親/子サーバー1台ずつ起動する場合のコマンド実行例です。
親サーバーの起動形式(Websocketのポート番号=10000、サーバー間通信用のポート番号=10000で起動する場合)
> php worker app:udpmulti-server 10000 10000
                    
子サーバーの起動形式(Websocketのポート番号=20000、サーバー間通信用のポート番号=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

おわりに

サーバー名にminecraftという文字が含まれているものがマインクラフトで接続できるサーバーです。
それ以外のサーバーに接続しようとしても無反応かエラーになりますのでご注意ください。

マルチサーバーを使って複数のプロセスを起動する時はバッチやシェルを組んでおくと便利です。
あるいはプロセスIDを含める形でサーバーの情報をデータベースに登録して、起動ファイルや停止ファイルをPHPで作っておけば、exec関数で全サーバーの起動をかけたり、killコマンドで停止させる事も可能なので運用が楽になります。

ただ複数のプロセスを起ち上げる時はバックグランド実行にしないと連続で起動がかかりません。
PowerShellでもバックグランド実行はできます。バージョン6以上をインストールしておけばLinuxのように&(アンパサンド)を付けて実行する事も可能です。

デモのコマンド仕様は▶デモのコマンド仕様ページでご覧ください。