Heim > PHP-Framework > Workerman > So verwenden Sie Workerman in Thinkphp5.1

So verwenden Sie Workerman in Thinkphp5.1

Freigeben: 2020-02-10 16:58:20
nach vorne
11801 Leute haben es durchsucht

Workerman ist ein Open-Source-Hochleistungs-Asynchron-PHP-Socket-Framework, das ausschließlich in PHP entwickelt wurde. ThinkPHP ist ein schnelles, kompatibles und einfaches, leichtes inländisches PHP-Entwicklungsframework. In diesem Artikel erfahren Sie, wie Sie Workerman in Thinkphp5.1 verwenden.

So verwenden Sie Workerman in Thinkphp5.1

Ich habe Swoole schon einmal verwendet und vor kurzem Workerman studiert, also habe ich Composer installiert

composer require workerman/workerman
Nach dem Login kopieren

Schreiben Sie einen Testcode in den Thinkphp-Controller

<?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();
    }

}
Nach dem Login kopieren

Befehlszeilenausführung: php index.php workerman/index. Ich dachte, es wäre erledigt, aber die folgende Eingabeaufforderung wurde gemeldet:

So verwenden Sie Workerman in Thinkphp5.1

Offensichtlich kann Workerman die Datei nicht direkt ausführen. Verwenden Sie laut offizieller Dokumentation

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

wird in diesem Format ausgeführt. Also habe ich die Datei index.php geändert, um die Route

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

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

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

// 执行应用并响应
Container::get(&#39;app&#39;)->bind("workerman/index")->run()->send();
Nach dem Login kopieren

zu binden, und php index.php start direkt ausgeführt. Leider wurde mir angezeigt, dass das Startmodell nicht gefunden werden konnte. Warum wird das TP5-Parsing als Route gestartet? Was soll ich tun? Workerman muss mit der Startmethode ausgeführt werden, aber tp5 muss die Parameter in ein Modell analysieren.

Nachdem ich die Informationen überprüft hatte, stellte ich fest, dass Thinkphp5.1 selbst Workerman integriert. Sie können workerman mit thinkphp5 installieren und es dann im Betriebsmodus von thinkphp ausführen.

Der Ausführungsbefehl wurde geändert in:

php think worker
Nach dem Login kopieren

Später stellte ich fest, dass das von Thinkphp5.1 integrierte Workerman-Paket etwas mühsam und schwierig zu verwenden ist, und wenn Sie den Workerman verwenden möchten Dienste wie PHPSocketIO verwenden die integrierte Methode Sehr problematisch.

workerman verwendet den ersten Parameter als Befehl zum Betreiben des Dienstes. Kann ich ihn ändern, um den zweiten Parameter als Befehl zum Betreiben des Dienstes zu verwenden?

Genau das hat es getan. Suchen Sie die Funktion parseCommand() im Workerman-Plug-in. Diese Geisterfunktion dient dazu, den Operationsbefehl abzurufen und zu ändern:

argv[1] zu argv[2], argv[2] zu argv[2] zu argv[2] zu 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;;
Nach dem Login kopieren

Der Ausführungsbefehl wird in

php server.php index start
Nach dem Login kopieren

geändert (der erste Parameter wird für Thinkphp zum Parsen der Route verwendet, und der zweite Parameter wird für den Workerman zum Parsen des Betriebsdienstbefehls verwendet)

Weitere Workerman-Kenntnisse finden Sie in der Tutorial-Spalte Workerman-Framework auf der chinesischen PHP-Website.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Workerman in Thinkphp5.1. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage