Heim > Artikel > PHP-Framework > So verwenden Sie Workerman in Thinkphp5.1
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.
Ich habe Swoole schon einmal verwendet und vor kurzem Workerman studiert, also habe ich Composer installiert
composer require workerman/workerman
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('hello world'); }; // 运行worker Worker::runAll(); } }
Befehlszeilenausführung: php index.php workerman/index. Ich dachte, es wäre erledigt, aber die folgende Eingabeaufforderung wurde gemeldet:
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__ . '/../thinkphp/base.php'; // 支持事先使用静态方法设置Request对象和Config对象 // 执行应用并响应 Container::get('app')->bind("workerman/index")->run()->send();
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
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( '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] : '';
Der Ausführungsbefehl wird in
php server.php index start
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!