Maison > cadre php > Workerman > le corps du texte

Comment utiliser Workerman dans Thinkphp5.1

Libérer: 2020-02-10 16:58:20
avant
11740 Les gens l'ont consulté

Workerman est un framework de socket PHP asynchrone open source hautes performances développé uniquement en PHP. ThinkPHP est un framework de développement PHP domestique léger, rapide, compatible et simple. Cet article vous présentera comment utiliser Workererman dans Thinkphp5.1.

Comment utiliser Workerman dans Thinkphp5.1

J'ai déjà utilisé swoole et récemment j'ai étudié Workmanman, j'ai donc installé composer

composer require workerman/workerman
Copier après la connexion

Écrivez un code de test dans le contrôleur 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();
    }

}
Copier après la connexion

Exécution de la ligne de commande : php index.php workman/index. Je pensais que c'était fait, mais l'invite suivante a été signalée :

Comment utiliser Workerman dans Thinkphp5.1

De toute évidence, Workerman ne peut pas exécuter le fichier directement. Selon la documentation officielle, utilisez

.

php index .php start
php index.php stop
php index.php restart

est exécuté dans ce format. J'ai donc modifié le fichier index.php pour lier la route

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

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

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

// 执行应用并响应
Container::get(&#39;app&#39;)->bind("workerman/index")->run()->send();
Copier après la connexion

et j'ai exécuté directement php index.php start Malheureusement, il a été indiqué que le modèle de démarrage était introuvable. Pourquoi l'analyse tp5 commence-t-elle comme une route. Que dois-je faire ? Workerman doit être exécuté à l'aide de la méthode start, mais tp5 doit analyser les paramètres dans un modèle.

Après avoir vérifié les informations, j'ai découvert que Thinkphp5.1 lui-même intègre Workerman. Vous pouvez utiliser thinkphp5 pour installer workererman, puis l'exécuter en utilisant le mode d'exécution de thinkphp.

La commande d'exécution a été modifiée en :

php think worker
Copier après la connexion

Plus tard, j'ai découvert que le package Workerman intégré par Thinkphp5.1 est un peu gênant et difficile à utiliser, et si vous souhaitez utiliser Workerman service tel que PHPSocketIO, utiliser la méthode intégrée Très gênant.

workerman utilise le premier paramètre comme commande pour faire fonctionner le service. Puis-je le modifier pour utiliser le deuxième paramètre comme commande pour faire fonctionner le service ?

C’est exactement ce que ça a fait. Recherchez la fonction parseCommand() dans le plug-in Workerman. Cette fonction fantôme consiste à obtenir la commande d'opération, changez :

argv[1] en argv[2], argv[2] en argv[2] en argv[2] en 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;;
Copier après la connexion

La commande d'exécution est modifiée en

php server.php index start
Copier après la connexion

(le premier paramètre est utilisé par Thinkphp pour analyser l'itinéraire, et le deuxième paramètre est utilisé par l'ouvrier pour analyser la commande de service d'opération)

Pour plus de connaissances sur Workerman, veuillez faire attention à la colonne du didacticiel du site Web PHP chinois workerman framework .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal