簡単な開発例
インストール
workermanのインストール
空のディレクトリで次のコマンドを実行します。
composer require workerman/workerman
例1、HTTPプロトコルを使用してWebサービスを提供
start.phpファイルの作成
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// 2345ポートでリッスンし、httpプロトコルを使って通信するWorkerを作成
$http_worker = new Worker("http://0.0.0.0:2345");
// 外部にサービスを提供するために4つのプロセスを起動
$http_worker->count = 4;
// ブラウザから送信されたデータを受け取ったときにブラウザにhello worldを返す
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// ブラウザにhello worldを送信
$connection->send('hello world');
};
// workerを実行
Worker::runAll();
コマンドライン実行(Windowsユーザーは cmdコマンドラインを使用)
php start.php start
テスト
サーバーのIPが127.0.0.1であると仮定します。
ブラウザでURL http://127.0.0.1:2345 にアクセスします。
注意:
1、アクセスできない場合は、クライアント接続失敗の原因のセクションを参照してトラブルシューティングを行ってください。
2、サーバーはHTTPプロトコルを使用しているため、HTTPプロトコルでのみ通信可能であり、WebSocketなどの他のプロトコルでは直接通信できません。
例2、WebSocketプロトコルを使用してサービスを提供
ws_test.phpファイルの作成
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 注意:ここは前の例とは異なり、websocketプロトコルを使用しています
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// 外部にサービスを提供するために4つのプロセスを起動
$ws_worker->count = 4;
// クライアントから送信されたデータを受け取ったときにhello $dataをクライアントに返す
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// クライアントにhello $dataを送信
$connection->send('hello ' . $data);
};
// workerを実行
Worker::runAll();
コマンドライン実行
php ws_test.php start
テスト
Chromeブラウザを開き、F12を押してデバッグコンソールを開き、Console欄に入力します(または、以下のコードをHTMLページにJavaScriptで貼り付けて実行します)
// サーバーのIPが127.0.0.1であると仮定します
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("接続成功");
ws.send('tom');
alert("サーバーに文字列を送信:tom");
};
ws.onmessage = function(e) {
alert("サーバーからのメッセージを受信:" + e.data);
};
注意:
1、アクセスできない場合は、マニュアルのよくある質問-接続失敗のセクションを参照してトラブルシューティングを行ってください。
2、サーバーはWebSocketプロトコルを使用しているため、WebSocketプロトコルでのみ通信可能であり、HTTPなどの他のプロトコルでは直接通信できません。
例3、直接TCPでデータを転送する
tcp_test.phpの作成
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 2347ポートでリッスンし、アプリケーションレイヤーのプロトコルを使用しないWorkerを作成
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// 外部にサービスを提供するために4つのプロセスを起動
$tcp_worker->count = 4;
// クライアントからデータが送信されたとき
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// クライアントにhello $dataを送信
$connection->send('hello ' . $data);
};
// workerを実行
Worker::runAll();
コマンドライン実行
php tcp_test.php start
テスト:コマンドライン実行
(以下はLinuxコマンドラインの結果で、Windowsの結果とは異なる場合があります)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^>'.
tom
hello tom
注意:
1、アクセスできない場合は、マニュアルのよくある質問-接続失敗のセクションを参照してトラブルシューティングを行ってください。
2、サーバーは生のTCPプロトコルを使用しているため、WebSocketやHTTPなどの他のプロトコルでは直接通信できません。