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

Swoole理解manager进程和worker进程的启动顺序,以及演示如何停止或者重启服务端。...

测试的代码主要功能:开启一个tcp服务器。然后设置了管理进程和工作进程start的回调进行更名。设置了pid_file保存了服务端启动的mast进程。

 测试的代码主要功能:开启一个tcp服务器。然后设置了管理进程和工作进程start的回调进行更名。设置了pid_file保存了服务端启动的mast进程。

php
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array('max_request ' => 10, //reactor thread num'worker_num' => 4, //worker process num'log_file' => 'swoole.log','pid_file' => 'server.pid',
));
$serv->on('managerStart',function($serv){swoole_set_process_name("managerprocess");
});
$serv->on('workerStart',function($serv, $worker_id){if($worker_id >= $serv->setting['worker_num']) {swoole_set_process_name("workprocess_".($worker_id-$serv->setting['worker_num']));} else {swoole_set_process_name("workprocess_{$worker_id}");}
});
$serv->on('start',function($serv){echo "到这一步说明服务已经起来了,manager,work都已经回调start完成";
});
//监听连接进入事件
$serv->on('connect', function ($serv, $fd) { echo "Client: Connect.\n";
});
//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) {$serv->send($fd, "Server: ".$data);
});
//监听连接关闭事件
$serv->on('close', function ($serv, $fd) {echo "Client: Close.\n";
});
//启动服务器
$serv->start();

开启服务器后

查看进程,在server->start 后,拉起workNum+2(master,manager进程)。

然后查看pid_file里的master进程id是否是1827,上图所示。结果显然是一致的

 

下面写一个脚本去重启和停止服务端。(原理就是给mast进程发送信号)

php$options = 's';$command = getopt($options);$pidFile = 'server.pid';if(isset($command['s'])){if($command['s']=='stop'){stop();}else{reload();}}else{die("请输入-s stop|reload");}function stop(){global $pidFile;if (file_exists($pidFile)) {$pid = file_get_contents($pidFile);if (!swoole_process::kill($pid, 0)) {echo "PID :{$pid} not exist \n";return false;}swoole_process::kill($pid);//等待5秒$time = time();$flag = false;while (true) {usleep(1000);if (!swoole_process::kill($pid, 0)) {echo "server stop at " . date("y-m-d h:i:s") . "\n";if (is_file($pidFile)) {unlink($pidFile);}$flag = true;break;} else {if (time() - $time > 5) {echo "stop server fail.try again \n";break;}}}return $flag;} else {echo "pid 文件不存在,请执行查找主进程pid,kill!\n";return false;}}function reload(){global $pidFile;if (file_exists($pidFile)) {$sig = SIGUSR1;$pid = file_get_contents($pidFile);if (!swoole_process::kill($pid, 0)) {echo "pid :{$pid} not exist \n";return;}swoole_process::kill($pid, $sig);echo "send server reload command at " . date("y-m-d h:i:s") . "\n";} else {echo "pid 文件不存在,请执行查找主进程pid,kill!\n";}}

先执行重启

再查看进程

主进程还是1827,但是工作进程就被reload的了。

然后执行退出

查看进程确实不见了

 

转:https://www.cnblogs.com/gavinjunftd/p/9520144.html



推荐阅读
  • 本文详细介绍了ActivityManagerService (AMS) 的工作原理及其在Android系统中的重要角色。AMS作为system_server进程的一部分,在系统启动时加载,负责管理和协调应用程序中的Activity和服务(Service)。文章将通过具体的接口图和通信流程,帮助读者更好地理解AMS的工作机制。 ... [详细]
  • Microsoft即将发布WPF/E的CTP(Community Technology Preview)和SDK,标志着RIA(Rich Internet Application)技术的新里程碑。更多详情及下载链接请参见MSDN官方页面。 ... [详细]
  • Node.js 入门指南(一)
    本文介绍了Node.js的安装步骤、如何创建第一个应用程序、NPM的基本使用以及处理回调函数的方法。通过实际操作示例,帮助初学者快速掌握Node.js的基础知识。 ... [详细]
  • 本文将详细介绍NSRunLoop的工作原理,包括其基本概念、消息类型(事件源)、运行模式、生命周期管理以及嵌套运行等关键知识点,帮助开发者更好地理解和应用这一重要技术。 ... [详细]
  • YB02 防水车载GPS追踪器
    YB02防水车载GPS追踪器由Yuebiz科技有限公司设计生产,适用于车辆防盗、车队管理和实时追踪等多种场合。 ... [详细]
  • 本文探讨了浏览器的同源策略限制及其对 AJAX 请求的影响,并详细介绍了如何在 Spring Boot 应用中优雅地处理跨域请求,特别是当请求包含自定义 Headers 时的解决方案。 ... [详细]
  • 本文详细介绍了Linux操作系统中的cp和scp命令,包括它们的基本使用方法、常见选项以及如何通过scp命令安全地在不同主机之间传输文件。 ... [详细]
  • 本文探讨了如何在TWiki中配置自定义标记,以实现特定字符串(如#12345)自动转换为指向票务系统的超链接。此功能类似于在其他平台上的实现,旨在提高信息检索效率。 ... [详细]
  • 本文介绍了如何通过扩展 Panel 控件来实现滚动条位置的自动保存和恢复。类似于 Page 的 MaintainScrollPositionOnPostBack 属性,我们将在自定义的 TBPanel 控件中添加相同的功能。 ... [详细]
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • Java Servlet中获取客户端IP与MAC地址的方法
    本文介绍了一种在Java Servlet应用中获取客户端IP地址及MAC地址的技术实现方法,通过示例代码详细解析了获取过程中的关键步骤和技术点。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • Spring Boot 入门指南
    本文介绍了Spring Boot的基本概念及其在现代Java应用程序开发中的作用。Spring Boot旨在简化Spring应用的初始设置和开发过程,通过自动配置和约定优于配置的原则,帮助开发者快速构建基于Spring框架的应用。 ... [详细]
  • Webpack中实现环境与代码的有效分离
    本文探讨了如何在Webpack中有效地区分开发与生产环境,并实现代码的合理分离,以提高项目的可维护性和加载性能。 ... [详细]
  • Redis安全防护深入解析
    本文详细探讨了如何通过指令安全、端口管理和SSL代理等措施有效保护Redis服务的安全性。 ... [详细]
author-avatar
无心睡眠tuo_295
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有