ホームページ > PHPフレームワーク > Workerman > Thinkphp5.1でworkermanを使用する方法

Thinkphp5.1でworkermanを使用する方法

リリース: 2020-02-10 16:58:20
転載
11804 人が閲覧しました

Workerman は、純粋に PHP で開発されたオープンソースの高性能非同期 PHP ソケット フレームワークです。 ThinkPHP は高速で互換性があり、シンプルで軽量な国産 PHP 開発フレームワークです この記事では Thinkphp5.1 での workerman の使い方を紹介します。

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(&#39;hello world&#39;);
        };
        // 运行worker
        Worker::runAll();
    }

}
ログイン後にコピー

コマンドライン実行: phpindex.phpworkerman/index。完了したと思いましたが、次のプロンプトが報告されました:

Thinkphp5.1でworkermanを使用する方法

明らかに、Workerman はファイルを直接実行できません。公式ドキュメントによると、

を使用してください。

phpindex.phpstart
phpindex.phpstop
phpindex.phprestart

という形式で実行されます。そこで、index.php ファイルを変更してルート

// [ 应用入口文件 ]
namespace think;

// 加载基础文件
require __DIR__ . &#39;/../thinkphp/base.php&#39;;

// 支持事先使用静态方法设置Request对象和Config对象

// 执行应用并响应
Container::get(&#39;app&#39;)->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(
            &#39;start&#39;,
            &#39;stop&#39;,
            &#39;restart&#39;,
            &#39;reload&#39;,
            &#39;status&#39;,
            &#39;connections&#39;,
        );
        $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(&#39;Unknown command: &#39; . $argv[2] . "\n");
            }
            exit($usage);
        }

        // Get command.
        $command  = trim($argv[2]);
        $command2 = isset($argv[3]) ? $argv[3] : &#39;&#39;;
ログイン後にコピー

実行コマンドは

php server.php index start
ログイン後にコピー
に変更されます (最初のパラメーターは Thinkphp がルーティングを解析するために使用され、2 番目のパラメーターはワーカーマンが運用サービス コマンドを解析するために使用されます)


workerman についてさらに詳しく知りたい場合は、PHP 中国語 Web サイト

workerman Framework のチュートリアル欄に注目してください。

以上がThinkphp5.1でworkermanを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート