0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SOCKET-MANAGERを使った自作サーバー開発の手引き<フレームワークの特徴>

0
Last updated at Posted at 2025-05-18

はじめに

本フレームワークは、WebSocket/TCP/UDP に加えてREST-API / RESTful-API サーバー開発にも対応しています。
PSR-7準拠のHTTPメッセージ処理と、ビルトインのステートマシンにより、Chunked Transfer や SSE などの分割送信処理を安定して実装できます。

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

以下のようにフレームワークコマンドのUsageを表示すると、サーバーの実装に必要なコマンド群が表示されます。

Usageの表示
> php worker
SOCKET-MANAGER Framework 1.X.X

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 <メッセージファイル名>             メッセージファイルの生成
 runtime
  runtime:init <初期化クラス名>                   初期化クラスの生成
  runtime:parameter <UNITパラメータクラス名>      UNITパラメータクラスの生成
  runtime:units <ランタイムUNIT定義のクラス名>    ランタイムUNIT定義のクラスとキュー/ステータス名Enumの生成
  runtime:main <メイン処理のクラス名>             メイン処理クラスの生成
 simple
  simple:tcp-server <メイン処理のクラス名>        TCPサーバー用メイン処理クラスの生成
  simple:tcp-client <メイン処理のクラス名>        TCPクライアント用メイン処理クラスの生成
  simple:udp <メイン処理のクラス名>               UDP通信用メイン処理クラスの生成

コマンドによる実装とサーバー起動

例えば、メイン処理を作成してインスタンス化し、サーバーを起動するまでの手順は以下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.X.X

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 <メッセージファイル名>             メッセージファイルの生成
 runtime
  runtime:init <初期化クラス名>                   初期化クラスの生成
  runtime:parameter <UNITパラメータクラス名>      UNITパラメータクラスの生成
  runtime:units <ランタイムUNIT定義のクラス名>    ランタイムUNIT定義のクラスとキュー/ステータス名Enumの生成
  runtime:main <メイン処理のクラス名>             メイン処理クラスの生成
 simple
  simple:tcp-server <メイン処理のクラス名>        TCPサーバー用メイン処理クラスの生成
  simple:tcp-client <メイン処理のクラス名>        TCPクライアント用メイン処理クラスの生成
  simple:udp <メイン処理のクラス名>               UDP通信用メイン処理クラスの生成

利用できるプロジェクト環境

サーバー開発が始められる環境は、開発の目的に合わせて以下の4種類のプロジェクトから選べるようになっています。

①フレームワークのデモ環境

Webブラウザ⇒マインクラフト間チャットが可能なチャットサーバーのデモ環境です。
デモ環境には6種類のサーバーが内包されていて、マルチサーバー環境でサーバー間通信(IPC)によるプライベートメッセージの送信が可能なサーバーも含まれています。

②新規プロジェクト開発環境

プロトコル開発も含めて一から始められる環境です。
開発に必要な各コマンドの利用例をご紹介しています。

③Websocketサーバー開発環境

Websocketプロトコルが実装済の環境で、サーバーコンテンツの開発から始められます。
簡単なチャットコンテンツの作成例をご紹介しています。

④マインクラフトコンテンツ専用環境

マインクラフトのカスタムアイテムやカスタムエンティティを制御できます。
Webブラウザでアイテムショップを運用できます。
以下のページではカスタムアイテムの一つである「いなずまの弓」を実装例としてプロジェクト環境をご紹介しています。

この環境では①のデモ版を継承しているのでデモの機能はそのまま使えます。

おわりに

コマンドベースのインターフェースはLaravelとの連携を考慮しているので、以下のページでその連携方法をご紹介しています。

連携後はLaravelのコマンドを使ってサーバーを起動する事もできるので、Laravelのリソースを使った開発が可能になる事に加え、Webアプリとのオールインワン環境としても使えるようになります。
また、Laravelとの連携後であってもこのフレームワークのコマンドを使って引き続きサーバー開発が行えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?