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.
J'ai déjà utilisé swoole et récemment j'ai étudié Workmanman, j'ai donc installé composer
composer require workerman/workerman
É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('hello world'); }; // 运行worker Worker::runAll(); } }
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 :
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__ . '/../thinkphp/base.php'; // 支持事先使用静态方法设置Request对象和Config对象 // 执行应用并响应 Container::get('app')->bind("workerman/index")->run()->send();
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
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( '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] : '';
La commande d'exécution est modifiée en
php server.php index start
(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!