博主信息
博文 35
粉丝 0
评论 0
访问量 46887
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
php中Swoole的热更新实现代码实例
P粉526161432
原创
1617人浏览过
  1. 这篇文章主要介绍了phpSWOOLE的热更新实现代码实例,热更新是比较常用的技术,有需要同学可以研究下
  1. 使用swoole_http_server替代php-fpm后,由于php长驻内存,修改了代码不能实时调试,需要去手动去重启服务,很是不方便,决定使用inotify来监控文件状态的改变,来给swoole发送reload信号,来实现swoole的热更新。
  2. 如何安装inotify就不写了,安装之后可以建立一个脚本文件,如php_reload.sh:
  1. #!/bin/sh
  2. # src 需要监控的地址
  3. src=/home/server/Project/test/app/
  4. /usr/bin/inotifywait -rmq -e create,modify,delete $src | while read event
  5. do
  6. /home/server/Project/test/bin/httpserver reload
  7. done
  1. linux shell swoole重启脚本
  1. 代码如下
  1. #!/bin/sh
  2. kill `lsof -t -i:9501`
  3. sleep 2
  4. php /data/web/mircoweb/wwwroot/Public/swoole.php
  5. sleep 1
  6. netstat -ntlp
  1. 如果不支持lsof命令 那就yum install lsof安装下吧
  2. swoole服务平滑重启
  3. 1. reload.sh脚本
  1. echo "loading..."
  2. pid="pidof live_name"
  3. echo $pid
  4. kill -USR1 $pid
  5. echo "loading success"
  1. 2. linux中执行
  2. sh reload.sh
  3. 代码用的原来只是自己加了一些操作流程
  4. swoole_reload_server.php
  1. <?php
  2. class Server
  3. {
  4. private $serv;
  5. public function __construct() {
  6. $this->serv = new swoole_server("0.0.0.0", 9501);
  7. $this->serv->set(array(
  8. 'worker_num' => 8,
  9. 'daemonize' => false,
  10. 'max_request' => 10000,
  11. 'dispatch_mode' => 2,
  12. 'debug_mode'=> 1,
  13. ));
  14. $this->serv->on('Start', array($this, 'onStart'));
  15. $this->serv->on('WorkerStart', array($this, 'onWorkerStart'));
  16. $this->serv->on('Connect', array($this, 'onConnect'));
  17. $this->serv->on('Receive', array($this, 'onReceive'));
  18. $this->serv->on('Close', array($this, 'onClose'));
  19. $this->serv->start();
  20. }
  21. public function onStart( $serv ) {
  22. echo "Start\n";
  23. cli_set_process_title("reload_master");
  24. }
  25. public function onWorkerStart( $serv , $worker_id) {
  26. require_once "reload_page.php";
  27. Test();
  28. }
  29. public function onConnect( $serv, $fd, $from_id ) {
  30. echo "Client {$fd} connect\n";
  31. }
  32. public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {
  33. echo "Get Message From Client {$fd}:{$data}\n";
  34. }
  35. public function onClose( $serv, $fd, $from_id ) {
  36. echo "Client {$fd} close connection\n";
  37. }
  38. }
  39. new Server();
  1. reload.shreload.sh
  1. echo "Reloading..."
  2. cmd=$(pidof reload_master)
  3. kill -USR1 "$cmd"
  4. echo "Reloaded"
  1. reload_page.php
  1. <?php
  2. /**
  3. * If you change this function and want
  4. * swoole_server to use the new function,
  5. * just run 'reload.sh' to send a restart
  6. * signal to swoole_server.
  7. */
  8. function Test() {
  9. echo "This is not a php file\n";
  10. }
  1. 到此这篇关于phpSWOOLE的热更新实现代码实例的文章就介绍到这了,更多相关phpSWOOLE的热更新实现内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学