【フレームワークのご紹介】

はじめに

SOCKET-MANAGER Framework(ソケットマネージャーフレームワーク)はソケット通信サーバーの開発を支援するための環境です。
ここではサーバー開発を行う際に必要な情報を、左メニューのカテゴリに分けてご紹介しています。
以下はそのメニューカテゴリの説明です。

MAIN-MENU

このフレームワークの概要や事前知識も含め、実装に必要な情報を公開しています。
また、以下のサブカテゴリもございます。
・IMPLEMENT
実装のメインとなるコマンドを使ったコーディング方法を各コマンドごとにご紹介しています。

・ADVANCED
マルチサーバーの構築方法やLaravelとの連携方法など、より高度な使い方をご紹介しています。

・OTHER-PROJECT
実装を始める時に利用可能なデモ版を除くプロジェクト環境をご紹介しています。

EXTRA-MENU

デモ版の追加情報やWebsocketプロトコルの切断フレームに関する情報など実装には直接関係しない補足的な情報を掲載しています。

PHP-TECHNIQUE

このフレームワークに関する技術情報を提供しています。

フレームワークの特徴

サーバーアプリを開発するツールと言えば一般にライブラリ形式で提供されているものが多い印象ですが、このフレームワークでは頻繁に書くような慣習的なコーディング部分をコマンド操作で概ね補えるようになっています。
以下のようにフレームワークコマンドのUsageを表示すると、サーバーの実装に必要なコマンド群が表示されます。
> php worker
SOCKET-MANAGER Framework 1.0.0

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 <メッセージファイル名>             メッセージファイルの生成
                    

例えば、メイン処理を作成してインスタンス化し、サーバーを起動するまでの手順は以下2ステップのコマンドで完結します。

①メイン処理の作成

php worker craft:main <メイン処理クラス名>というコマンドを使ってメイン処理クラスのひな形を作成します。
今回の場合はMainForTestというクラス名を指定。
> php worker craft:main MainForTest

[success] メイン処理クラスの生成に成功しました (MainForTest)
                    

生成されたクラスはapp/MainClassの場所に格納されます。

②サーバーを起動

php workerコマンドを使ってapp:main-for-testというサーバー名を指定して起動。
(サーバー名はキャメルケースをスネークケースに変換して先頭にapp:を付与したものになります)
今回の場合はポート番号10000番で起動。
> php worker app:main-for-test 10000
                    

これでホスト名'localhost'(デフォルト)の10000ポートをListenポートとしてサーバーが起動します。(Ctrl+Cで停止します)

また、php workerを実行して再度Usageを表示すると、先ほど生成したサーバーの名前がmainカテゴリへ追加されているのが確認できます。
> php worker
SOCKET-MANAGER Framework 1.0.0

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 <メッセージファイル名>             メッセージファイルの生成
                    

コマンドベースのインターフェースはLaravelとの連携を考慮しているので、▶Laravelと連携するのページでその連携方法をご紹介しています。
連携後はLaravelのコマンドを使ってサーバーを起動する事もできるので、Laravelのリソースを使った開発が可能になる事に加え、Webアプリとのオールインワン環境としても使えるようになります。
また、Laravelとの連携後であっても当フレームワークのコマンドを使って引き続きサーバー開発が行えます。

以降では、デモ環境のご紹介とプロジェクト環境のインストール方法をご紹介していますので、開発を始める前にまずはそちらをご覧ください。

デモ画面

SOCKET-MANAGER Framework - マインクラフトとブラウザ間のチャットデモ
これはWebsocketサーバーを使ってマインクラフトとブラウザ間でチャットを行っている様子です。
通常のコメント発信とプライベート送信(マインクラフト側はウィスパー機能で実装)に対応しています。

一部例外はありますが、マインクラフトやほとんどのWebブラウザにはWebsocket通信の機能が実装されていますので、Websocketサーバーを通じてこのデモのようにWebブラウザ⇔マインクラフト間で通信を行う事が可能です。
(ブラウザのWebsocket機能はそのまま使えますので別途モジュールを適用する必要はありません)

以降ではデモサーバーのインストールとブラウザやマインクラフトからのアクセス方法をご紹介しています。

デモ確認環境

以下の構成はあくまで動作確認時の環境です。
事前にインストールが必要なのはPHPとComposerのみです。

プラットフォーム
Windows10
統合環境
Xampp v3.3.0
マインクラフト
Windows Edition v1.20.73
ブラウザ
Chrome v123.0.6312.123
言語
PHP v8.2.4(v8.1.0以降)
Composer
v2.6.5

インストール

あらかじめPHP8.1.0以降とComposerがインストールされているものとします。

拡張モジュールの適用

ライブラリを利用するにはまずsockets拡張モジュールを適用する必要がありますが既に入っている場合はこの項目は読み飛ばしてください。

※ここではXAMPP環境を使っている前提で説明していますが、デフォルトとは別の場所に格納している場合やLinux等の別の環境で利用されている場合は適宜読み替えてください。

php.ini内のモジュール定義がコメントアウトされている場合はコメントをはずして有効にする。
SOCKET-MANAGER Framework - php.ini内のモジュール定義箇所

以下のコマンドを実行してenabledになっている事を確認。
> php -i | Select-String -pattern 'Sockets Support'

Sockets Support => enabled
                    

これで拡張モジュールであるsocketsが有効になりました。

※PHPの拡張モジュールの詳細については>> 公式ページをご覧ください。


Composerでインストール

今回のデモ環境は以下のコマンドでインストールできます。
※GitHubから直接ダウンロードする場合は>> こちらからどうぞ。
> composer create-project socket-manager/demo-project <インストール先のディレクトリ名>
                    


動作確認

冒頭でご紹介したデモ版を動かしてみます。

サーバーサイドの準備

プロジェクトルートで以下のコマンドを実行するだけで準備完了です。
> php worker app:minecraft-chat-server 10000
                    

クライアント(ブラウザ)の準備

インストールしたプロジェクトには以下のディレクトリにjQuery/React版のHTMLファイルが入っていますのでお好きな方をブラウザにドラッグ&ドロップしてください(Webサーバーを起動する必要はありません)。
/app/client/jquery/chat.html(jQuery版)
/app/client/react/chat.html(React版)
                    

クライアント(マインクラフト)の準備

マインクラフトはUWPアプリのため以下のコマンドを実行してループバックアドレスへのアクセスを許可しておく必要があります。
> CheckNetIsolation.exe LoopbackExempt -a -n="Microsoft.MinecraftUWP_8wekyb3d8bbwe"
                    

マインクラフトから接続する時は冒頭のデモのように以下の形式で入力します。
> /wsserver localhost:10000/<ユーザー名>
                    

上記のユーザー名はマインクラフト内のユーザー名でなくても構いません。
あくまでデモ版のサーバー内で使用する名前です。

マインクラフトからは以下のように#でメンションを付ける事でプライベート送信ができます。
> <メッセージ>#<ユーザー名>
                    

マインクラフトから退室する時は×ボタンで閉じてください。

おわりに

一応マインクラフトからの退室コマンドもご用意していますが現状での使用はお勧めできません。
> $exit
                    

上記コマンドで退室してもマインクラフト側から再接続がかかったり、再接続時に失敗する事が頻繁にあります。
マインクラフトの切断処理の検証内容については▶切断フレームの検証⇒マインクラフトの場合のページでまとめています。

今回ご紹介させて頂いたのはデモサーバーの一部ですが、その他のサーバーについては▶デモサーバーの種類のページでご紹介しています。

ホスト名やポート番号等の設定ファイルの詳細は▶デモの設定ファイルのページでまとめています。