Hot UpdateWenn der Swoole-Server läuft, wird die PHP-Datei im residenten Speicher ausgeführt. Dadurch können wiederholtes Lesen der Festplatte, wiederholte Interpretation und Kompilierung von PHP vermieden werden, um die höchste Leistung zu erzielen Das Ändern des Codes erfordert einen Neustart. Die
think-swoole-Erweiterung bietet eine Hot-Update-Funktion. Sie wird automatisch neu gestartet, wenn festgestellt wird, dass relevante Dateien aktualisiert wurden. Dies ist praktisch für die Entwicklung und das Debuggen.
Es wird aufgrund von Leistungseinbußen nicht empfohlen, die Dateiüberwachung in einer Produktionsumgebung zu starten. Unter normalen Umständen müssen Sie die geänderten Dateien bestätigen, bevor sie aktualisiert und bereitgestellt werden können in .env aktiviert standardmäßig das Hot-Update
include
In welchen Verzeichnissen auf Dateiänderungen überwacht wird
exclude
exclude Inhaltsverzeichnis
websocket
先来一个官方的例子
$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
$server->on('open', function (Swoole\WebSocket\Server $server, $request) {
echo "server: handshake success with fd{$request->fd}\n";
});
$server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
echo "receive from {$frame->fd}:{$frame->data}\n";
$server->push($frame->fd, "this is server");
});
$server->on('close', function ($ser, $fd) {
echo "client {$fd} closed\n";
});
$server->start();
<?php
/**
* This file is auto-generated.
*/
declare(strict_types=1);
namespace rpc\contract\tp6;
interface UserInterface
{
public function create();
public function find(int $id);
}
return ['tp6' => ['rpc\contract\tp6\UserInterface']];
Nach dem Login kopieren
在控制器调用
public function index(\rpc\contract\tp6\UserInterface $user)
{
//
$user->find(1);
// $user->create();
}
<?php
declare (strict_types = 1);
namespace app\command;
use think\console\Command;
use think\console\input\Argument;
class SwooleTimer extends Command
{
protected function configure()
{
// 指令配置
$this->setName('app\command\swooletimer')
->addArgument('action', Argument::OPTIONAL, "start | stop", 'start')
->setDescription('Swoole Timer for ThinkPHP');
}
public function handle()
{
$action = $this->input->getArgument('action');
if (in_array($action, ['start','stopall'])) {
$this->app->invokeMethod([$this, $action], [], true);
} else {
$this->output->writeln("<error>Invalid argument action:{$action}, Expected start</error>");
}
}
/**
* 启动定时任务 主要任务计划在这里书写
*/
protected function start()
{
// https://wiki.swoole.com/#/timer
$timer_id=swoole_timer_tick(2000,function (){
echo "2s循环执行需要做的事情".time()."\n";
});
$this->output->writeln("Swoole Timer_id:{$timer_id} ");
}
/**
* 清除所有的定时任务
*/
protected function stop(){
swoole_timer_clear_all();
$this->output->writeln("Swoole Timer clear all ok");
}
}
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonTeilen Sie einen praktischen Fall von think-swoole [detaillierte Demonstration]. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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