php中Swoole的热更新实现代码实例
发布:smiling 来源: PHP粉丝网 添加日期:2022-04-16 14:10:37 浏览: 评论:0
使用swoole_http_server替代php-fpm后,由于php长驻内存,修改了代码不能实时调试,需要去手动去重启服务,很是不方便,决定使用inotify来监控文件状态的改变,来给swoole发送reload信号,来实现swoole的热更新。
如何安装inotify就不写了,安装之后可以建立一个脚本文件,如php_reload.sh:
- #!/bin/sh
- # src 需要监控的地址
- src=/home/server/Project/test/app/
- /usr/bin/inotifywait -rmq -e create,modify,delete $src | while read event
- do
- /home/server/Project/test/bin/httpserver reload
- done
linux shell 写swoole重启脚本
代码如下
- #!/bin/sh
- kill `lsof -t -i:9501`
- sleep 2
- php /data/web/mircoweb/wwwroot/Public/swoole.php
- sleep 1
- netstat -ntlp
如果不支持lsof命令 那就yum install lsof安装下吧
swoole服务平滑重启
1. reload.sh脚本
- echo "loading..."
- pid="pidof live_name"
- echo $pid
- kill -USR1 $pid
- echo "loading success"
2. linux中执行
sh reload.sh
代码用的原来只是自己加了一些操作流程
swoole_reload_server.php
- <?php
- class Server
- {
- private $serv;
- public function __construct() {
- $this->serv = new swoole_server("0.0.0.0", 9501);
- $this->serv->set(array(
- 'worker_num' => 8,
- 'daemonize' => false,
- 'max_request' => 10000,
- 'dispatch_mode' => 2,
- 'debug_mode'=> 1,
- ));
- $this->serv->on('Start', array($this, 'onStart'));
- $this->serv->on('WorkerStart', array($this, 'onWorkerStart'));
- $this->serv->on('Connect', array($this, 'onConnect'));
- $this->serv->on('Receive', array($this, 'onReceive'));
- $this->serv->on('Close', array($this, 'onClose'));
- $this->serv->start();
- }
- public function onStart( $serv ) {
- echo "Start\n";
- cli_set_process_title("reload_master");
- }
- public function onWorkerStart( $serv , $worker_id) {
- require_once "reload_page.php";
- Test();
- }
- public function onConnect( $serv, $fd, $from_id ) {
- echo "Client {$fd} connect\n";
- }
- public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {
- echo "Get Message From Client {$fd}:{$data}\n";
- }
- public function onClose( $serv, $fd, $from_id ) {
- echo "Client {$fd} close connection\n";
- }
- }
- new Server();
reload.sh
- echo "Reloading..."
- cmd=$(pidof reload_master)
- kill -USR1 "$cmd"
- echo "Reloaded"
reload_page.php
- <?php
- /**
- * If you change this function and want
- * swoole_server to use the new function,
- * just run 'reload.sh' to send a restart
- * signal to swoole_server.
- */
- function Test() {
- echo "This is not a php file\n";
- }
Tags: Swoole热更新
- 上一篇:PHP实现页面静态化深入讲解
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)