Workerman プロジェクトの作成と実行
Workerman とは?
Workerman は、高い同時接続数と高性能を実現するために設計された、PHP の非同期ネットワーク通信ライブラリです。Web サーバー、WebSocket サーバー、TCP/UDP サーバーなどの構築に利用できるうえ、リアルタイムチャットやゲームサーバー、IoT などのシナリオに適しています。Workerman は軽量で使いやすく、高効率な特徴があり、開発者が複雑なネットワークアプリケーションを簡単に実現できるようにします。
Workerman の主要な特徴と利点
- 高性能:イベント駆動と非同期非ブロッキング I/O に基づき、多数の同時接続を処理可能。
- 多様なプロトコルサポート:HTTP、WebSocket、TCP、UDP など複数のネットワークプロトコルをサポート。
- 使いやすさ:簡単かつ使いやすい API を提供し、開発者がすぐに始められる。
- 柔軟な拡張性:プラグインや拡張機能を通じてさらなる機能を実現。
- 強力なコミュニティサポート:活発な開発者コミュニティと豊富なドキュメントリソース。
Workerman は、開発者が多くの同時接続を必要とするシナリオで性能の高いネットワークアプリケーションを迅速に構築するのに役立ちます。
Workerman を使用して簡単な Web サーバーを作成し実行する
この記事では、ServBay 環境で Workerman を使用して簡単な Web サーバーを作成し実行する方法を説明します。Workerman のインストール、基本的なサーバーコードの作成、サーバーの実行手順を示します。
TIP
ServBay は、開発者が Web サイトを/Applications/ServBay/www
ディレクトリに配置することを推奨しています。管理を簡単にするためです。
Workerman のインストール
Composer のインストール
ServBay には出荷時に Composer が含まれているため、別途インストールは不要です。
プロジェクトディレクトリの作成
新しいプロジェクトディレクトリを作成し、そのディレクトリに移動します:
bashcd /Applications/ServBay/www mkdir servbay-workerman-app cd servbay-workerman-app
1
2
3Workerman のインストール
Composer を使用して Workerman をインストールします:
bashcomposer require workerman/workerman
1
Web サーバーコードの作成
プロジェクトディレクトリ内に server.php
ファイルを作成し、以下のコードを追加します:
<?php
require __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
// Web サーバーインスタンスを作成し、ポート8080を監視
$webServer = new Worker('http://0.0.0.0:8080');
// リクエストを処理するために4つのプロセスを起動
$webServer->count = 4;
// リクエスト処理ロジックを定義
$webServer->onMessage = function($connection, $request) {
$connection->send('Hello ServBay!');
};
// 全ての Worker インスタンスを実行
Worker::runAll();
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Web サーバーの実行
プロジェクトディレクトリで以下のコマンドを実行して Web サーバーを起動します:
php server.php start
起動後、ブラウザで http://localhost:8080
にアクセスすると、ページに Hello ServBay!
と表示されます。
Workerman を使用して WebSocket サーバーを作成
Web サーバー以外にも、Workerman を使用して WebSocket サーバーを作成できます。以下は簡単な WebSocket サーバーの例です。
WebSocket サーバーコードの作成
プロジェクトディレクトリ内に
websocket_server.php
ファイルを作成し、以下のコードを追加します:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; // WebSocket サーバーインスタンスを作成し、ポート8081を監視 $wsServer = new Worker('websocket://0.0.0.0:8081'); // リクエストを処理するために4つのプロセスを起動 $wsServer->count = 4; // 接続確立時の処理ロジックを定義 $wsServer->onConnect = function($connection) { echo "New connection\n"; }; // メッセージ受信時の処理ロジックを定義 $wsServer->onMessage = function($connection, $data) { $connection->send('Received: ' . $data); }; // 接続終了時の処理ロジックを定義 $wsServer->onClose = function($connection) { echo "Connection closed\n"; }; // 全ての Worker インスタンスを実行 Worker::runAll();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28WebSocket サーバーの実行
プロジェクトディレクトリで以下のコマンドを実行して WebSocket サーバーを起動します:
bashphp websocket_server.php start
1起動後、WebSocket クライアント(ブラウザの WebSocket デバッグツールなど)を使用して
ws://localhost:8081
に接続し、メッセージを送信すると、サーバーが受信したメッセージをエコーします。
Workerman を使用して TCP サーバーを作成
Workerman を使用して TCP サーバーも作成できます。以下は簡単な TCP サーバーの例です。
TCP サーバーコードの作成
プロジェクトディレクトリ内に
tcp_server.php
ファイルを作成し、以下のコードを追加します:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; // TCP サーバーインスタンスを作成し、ポート8082を監視 $tcpServer = new Worker('tcp://0.0.0.0:8082'); // リクエストを処理するために4つのプロセスを起動 $tcpServer->count = 4; // 接続確立時の処理ロジックを定義 $tcpServer->onConnect = function($connection) { echo "New connection\n"; }; // メッセージ受信時の処理ロジックを定義 $tcpServer->onMessage = function($connection, $data) { $connection->send('Received: ' . $data); }; // 接続終了時の処理ロジックを定義 $tcpServer->onClose = function($connection) { echo "Connection closed\n"; }; // 全ての Worker インスタンスを実行 Worker::runAll();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28TCP サーバーの実行
プロジェクトディレクトリで以下のコマンドを実行して TCP サーバーを起動します:
bashphp tcp_server.php start
1起動後、TCP クライアント(例えば
telnet
やnc
コマンド)を使用してlocalhost:8082
に接続し、メッセージを送信すると、サーバーが受信したメッセージをエコーします。
まとめ
以上の手順を通じて、ServBay を使用して Workerman プロジェクトを作成し、Workerman の機能を使って Web サーバー、WebSocket サーバー、および TCP サーバーを構築し実行しました。Workerman の高性能と使いやすさが、高並列処理を必要とするネットワークアプリケーションの構築に非常に適していることが分かります。この記事が Workerman の迅速な入門とプロジェクトへの適用に役立つことを願っています。