热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Swoole实战之手撸HttpServer框架16关于服务的平滑重启与热加载与cli_set_process_title函数的使用、添加前置进程、修改代码服务器自动热更新

视频地址https:www.bilibili.comvideoBV14E411t7T4?p24&vd_source4a69745b599dffec877b0fcfe130b092注

视频地址 https://www.bilibili.com/video/BV14E411t7T4?p=24&vd_source=4a69745b599dffec877b0fcfe130b092

注意:开发时才使用热加载,实际上线时不使用


1 关于服务的平滑重启

1.1 代码


pro\core\server\HttpServer.php

php
namespace Core\Server;
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
class HttpServer
{
private $server;

/**
* HttpServer constructor.
*
* @param $server
*/
public function __construct()
{
$this->server = new \Swoole\Http\Server('0.0.0.0',80);
//配置参数 https://wiki.swoole.com/#/server/setting
$this->server->set(array(
'worker_num'=>1, //设置启动的 Worker 进程数。【默认值:CPU 核数】
'daemonize'=>false // 使用docker 不需要设置守护进程
));
//$this->server->on('request',function ($req,$res){});
$this->server->on('request',[$this,'onRequset']);

$this->server->on('Start',[$this,'onStart']);

$this->server->on('ShutDown',[$this,'onShutDown']);
$this->server->on('WorkerStart',[$this,'onWorkerStart']);
$this->server->on('ManagerStart',[$this,'onManagerStart']);
//$http->start();

}

public function onWorkerStart(Server $server,int $workerId)
{
require_once (__DIR__."./../../test3.php");
cli_set_process_title(
"ttt worker"); //设置进程名称
}

public function onRequset(Request $request,Response $response)
{

$response->end(showMe());
}


public function onStart(Server $server)
{
cli_set_process_title(
"ttt master"); //设置进程名称
$mid = $server->master_pid; //返回当前服务器主进程的 PID。
file_put_contents("./ttt.pid",$mid); //会覆盖
}

public function onManagerStart(Server $server)
{
cli_set_process_title(
"ttt manager"); //设置进程名称
}
public function onShutDown(Server $server)
{
echo '关闭了'.PHP_EOL;
unlink("./ttt.pid");
}

public function run()
{
$this->server->start();
}
}

View Code


pro\test3.php

php
function showMe()
{
return 'ttt2';
}

1.2 测试

docker exec -it 67e09c446436 sh

 

原先

ps -ef |grep php

 

 现在

ps -ef |grep php

 


 1.3 reload



  • SIGUSR1: 向主进程 / 管理进程发送 SIGUSR1 信号,将平稳地 restart 所有 Worker 进程和 TaskWorker 进程

  • SIGUSR2: 向主进程 / 管理进程发送 SIGUSR2 信号,将平稳地重启所有 Task 进程

kill -USR1 136

# 重启所有worker进程
kill -USR1 主进程PID
# 仅重启task进程
kill -USR2 主进程PID

参考手册 https://wiki.swoole.com/#/server/methods?id=reload


2 添加前置进程、修改代码服务器自动热更新

在我们的http server中加一个启动进程


Server->addProcess

https://wiki.swoole.com/wiki/page/390.html

添加一个用户自定义的工作进程。此函数通常用于创建一个特殊的工作进程,用于监控、上报或者其他特殊的任务。

 


bool Server->addProcess(Process $process);


2.1 代码

\pro\core\init\TestProcess.php

php
/**
* Created by PhpStorm.
* User: SUN
* Date: 2022/7/25
* Time: 3:48
*/
namespace Core\init;
use Swoole\Process;
class TestProcess
{
public function run()
{

$process = new Process(function() {
while (true) {
echo "ttt".PHP_EOL;
sleep(3);
}
});
return $process;
}
}

View Code

\pro\core\server\HttpServer.php

public function run()
{
$p = new TestProcess();
$this->server->addProcess($p->run());
$this->server->start();
}

2.2 测试

 



推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
author-avatar
浪漫的没天份
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有