Workerman は、純粋に PHP で開発されたオープンソースの高性能非同期 PHP ソケット フレームワークです。 ThinkPHP は高速で互換性があり、シンプルで軽量な国産 PHP 開発フレームワークです この記事では Thinkphp5.1 での workerman の使い方を紹介します。
以前は swoole を使っていましたが、最近 workman を勉強したので、composer をインストールしました
composer require workerman/workerman
Thinkphp コントローラーでテストコードを書きます
<?php namespace app\workerman\controller; use think\Controller; use Workerman\Worker; class Index extends Controller { public function index() { // 创建一个Worker监听2345端口,使用http协议通讯 $http_worker = new Worker("http://0.0.0.0:2345"); // 启动4个进程对外提供服务 $http_worker->count = 4; // 接收到浏览器发送的数据时回复hello world给浏览器 $http_worker->onMessage = function($connection, $data) { // 向浏览器发送hello world $connection->send('hello world'); }; // 运行worker Worker::runAll(); } }
コマンドライン実行: phpindex.phpworkerman/index。完了したと思いましたが、次のプロンプトが報告されました:
明らかに、Workerman はファイルを直接実行できません。公式ドキュメントによると、
を使用してください。phpindex.phpstart
phpindex.phpstop
phpindex.phprestart
という形式で実行されます。そこで、index.php ファイルを変更してルート
// [ 应用入口文件 ] namespace think; // 加载基础文件 require __DIR__ . '/../thinkphp/base.php'; // 支持事先使用静态方法设置Request对象和Config对象 // 执行应用并响应 Container::get('app')->bind("workerman/index")->run()->send();
をバインドし、phpindex.php start を直接実行しましたが、残念ながら、開始モデルが見つからないというメッセージが表示されました。 tp5 の解析がルートとして開始されるのはなぜですか。どうすればよいでしょうか? Workerman は start メソッドを使用して実行する必要がありますが、tp5 はパラメーターをモデルに解析する必要があります。
情報を確認したところ、Thinkphp5.1自体にworkermanが統合されていることが分かりました。 thinkphp5 を使用して workerman をインストールし、thinkphp の実行モードを使用してそれを実行できます。
実行コマンドは
php think worker
に変更されました。 後で調べたら、Thinkphp5.1 に組み込まれている workman パッケージは少し面倒で使いにくいことが分かりました。 PHPSocketIO などのサービスを統合した方法を使用するのは非常に面倒です。
workerman は、サービスを操作するコマンドとして最初のパラメーターを使用していますが、2 番目のパラメーターをサービスを操作するコマンドとして使用するように変更できますか?
まさにそれが起こったのです。 workman プラグインで parseCommand() 関数を見つけます。このゴースト関数は、操作コマンドを取得し、
argv[1] を argv[2] に、argv[2] を argv[2] に、argv[2] を argv[3 ]## に変更します。 #
protected static function parseCommand() { if (static::$_OS !== OS_TYPE_LINUX) { return; } global $argv; // Check argv; $start_file = $argv[0]; $available_commands = array( 'start', 'stop', 'restart', 'reload', 'status', 'connections', ); $usage = "Usage: php yourfile <command> [mode]\nCommands: \nstart\t\tStart worker in DEBUG mode.\n\t\tUse mode -d to start in DAEMON mode.\nstop\t\tStop worker.\n\t\tUse mode -g to stop gracefully.\nrestart\t\tRestart workers.\n\t\tUse mode -d to start in DAEMON mode.\n\t\tUse mode -g to stop gracefully.\nreload\t\tReload codes.\n\t\tUse mode -g to reload gracefully.\nstatus\t\tGet worker status.\n\t\tUse mode -d to show live status.\nconnections\tGet worker connections.\n"; if (!isset($argv[2]) || !in_array($argv[2], $available_commands)) { if (isset($argv[2])) { static::safeEcho('Unknown command: ' . $argv[2] . "\n"); } exit($usage); } // Get command. $command = trim($argv[2]); $command2 = isset($argv[3]) ? $argv[3] : '';
php server.php index start
workerman Framework のチュートリアル欄に注目してください。
以上がThinkphp5.1でworkermanを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。