【デモの設定ファイル】

設定ファイルの内容

以下の設定ファイルはいずれもプロジェクトルートのsettingディレクトリに格納しています。

const.phpファイル

以下の設定はデモ環境に収録している6種類のサーバーで共通です。
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,
];
                    

■host
サーバーのホスト名を指定します。デフォルトはlocalhostですがリモート接続で利用する場合はこの部分を一意のホスト名かIPアドレスにする必要があります。
リモート接続でwssのプロトコルを利用する事もあるでしょう。その場合は>> WSSでの接続についての項目をご覧ください。
■port
Listenポートとして使うポート番号を指定します。UDPマルチサーバーの親サーバーとして使うポート番号と兼用しています。
TCPを使うWebsocketとは異なりUDPを使うマルチサーバーではソケットリソースが異なるため同じポート番号が使えます。
UDPマルチサーバーを使う場合、WebsocketサーバーとUDPマルチサーバーで使うポート番号が等しい場合に親サーバーだと判断しています。
■cycle_interval
ノンブロッキングループのインターバル時間をマイクロ秒(μs)単位で指定します。
数値が大きければホストのロードアベレージが下がりますが処理は遅くなります。
数値が小さければホストのロードアベレージが上がりますが処理は早くなります。
リソース状況は利用するホストによってまちまちなため調整が必要になる事があります。
■alive_interval
アライブチェック(死活監視)のためのタイムアウト時間を秒単位で指定します。
アライブチェック開始までの時間とチェック中のタイムアウト時間を兼用しています。
Websocketサーバー上ではping/pongフレームを使用しています。
■parent_port
TCPマルチサーバーの親サーバーとして使うポート番号を指定します。
TCPマルチサーバーはWebsocketサーバーで使うTCPとリソースが被るため異なるポート番号を使う必要があります。
Websocketサーバーのポート番号+10の値がTCPマルチサーバーで使うポート番号と等しい場合に親サーバーだと判断しています。
※設定ファイルの内容はデフォルト値として作用しますのでコマンドラインで入力された値が優先されます。
parent_portを除いては基本的にWebsocket開発環境も設定内容は同じです。


minecraft.phpファイル

以下の設定はマインクラフト用のファイルとしてご用意しているものです。
minecraft.php(マインクラフト用設定ファイル)
return [

    /**
     * @var array 設定するサブスクライブタイプ(複数指定可)
     */
    'subscribe_types' =>
    [
        'PlayerMessage'
    ]
];
                    

■subscribe_types
サブスクライブイベントの種類を指定します。初期の状態では"PlayerMessage"を登録していますが配列形式で複数指定可能です。
サブスクライブイベントの処理内容については▶マインクラフトの通信仕様(マインクラフトへの送信データ)をご覧ください。

WSSでの接続について

デモ環境やWebsocket開発環境に実装しているWebsocketサーバーには暗号化APIを実装していませんのでそのままではWSS接続を利用できません。
そのため別途リバースプロキシサーバーをご用意して頂く事で利用できるようになります。

例えばApacheの場合、以下のような設定を追加して頂く事で利用できるようになります。
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>
・
・
・
                    

※ローカルのルート証明書を使って接続確認は行っています。
※マインクラフトの場合は接続できなかったのでどうやらルート証明書を使っているわけではないようです。WSS接続の際は専用のサーバーを使っている可能性があるので注意が必要です。

クライアントの画面は今まで通りブラウザへのドラッグ&ドロップで使えますが、WebsocketAPIの向き先を以下のように変更する事で利用できます。