php使用goto实现自动重启swoole、reactphp、workerman服务的代码
发布:smiling 来源: PHP粉丝网 添加日期:2022-02-27 10:20:35 浏览: 评论:0
在平时使用swoole进行开发中,常常遇到这种问题,改了代码之后,手动ctrl+c中断服务,再敲命令重启服务,频繁地重启,感觉心很累。
php提供了inotify扩展,调用linux的inotify系统调用,监控文件的变化.
这时候就产生了一个想法,我开一个主进程监控文件变化,再开一个子进程运行swoole服务,主进程监听到文件变化之后,干掉子进程,然后再开一个子进程运行swoole服务. 子进程如果想优雅地退出,安装个信号处理器,在退出之前做一些操作。
- <?php
- //index.php
- require './vendor/autoload.php';
- Restart:
- $pid = pcntl_fork();
- if ($pid > 0) {
- $fd = inotify_init();
- $watch_descriptor = inotify_add_watch($fd, './src/', IN_MODIFY);
- $events = inotify_read($fd);
- posix_kill($pid, SIGTERM);
- fclose($fd);
- pcntl_wait($status);
- goto Restart;
- } elseif ($pid == 0) {
- \Church\Application::run();
- } else {
- exit(0);
- }
- <?php
- namespace Church;
- /**
- use Psr\Http\Message\ServerRequestInterface;
- use React\Http\Response;
- use React\Http\Server;
- **/
- class Application
- {
- public static function run()
- {
- /**
- $loop = \React\EventLoop\Factory::create();
- $loop->addSignal(SIGTERM, function() use ($loop) {
- $loop->stop();
- });
- $server = new Server(function (ServerRequestInterface $request) {
- return new Response(
- 200,
- array(
- 'Content-Type' => 'text/plain'
- ),
- "Hello World1!\n"
- );
- });
- $socket = new \React\Socket\Server(8080, $loop);
- $server->listen($socket);
- $loop->run();
- **/
- //高性能HTTP服务器
- $http = new \Swoole\Http\Server("127.0.0.1", 9501);
- $http->on("start", function ($server) {
- echo "Swoole http server is started at http://127.0.0.1:9501\n";
- });
- $http->on("request", function ($request, $response) {
- $response->header("Content-Type", "text/plain");
- $response->end("Hello World1\n");
- });
- $http->start();
- }
- }
个人觉得这里最优雅的实现方式应该是用GOTO了。
Tags: swoole reactphp workerman
- 上一篇:phpQuery采集网页实现代码实例
- 下一篇:最后一页
相关文章
- ·php异步多线程swoole使用实例程序(2015-04-15)
- ·PHP程序员学习使用Swoole的理由(2018-09-14)
- ·swoole_process父子进程管道通信的代码示例(2020-01-16)
- ·swoole事件处理流程(2020-04-06)
- ·Swoole协程与传统fpm同步模式比较(2020-04-09)
- ·PHP框架Swoole定时器Timer特性分析(2021-04-05)
- ·php异步多线程swoole用法实例(2021-04-26)
- ·使用php+swoole对client数据实时更新(一)(2021-07-04)
- ·PHP+swoole实现简单多人在线聊天群发(2021-07-06)
- ·基于 Swoole 的微信扫码登录功能实现代码(2021-08-30)
- ·基于swoole实现多人聊天室(2021-10-01)
- ·swoole_process实现进程池的方法示例(2021-11-01)
- ·Swoole实现异步投递task任务案例详解(2021-11-14)
- ·PHP扩展Swoole实现实时异步任务队列示例(2021-11-17)
- ·PHP+swoole+linux实现系统监控和性能优化操作示例(2021-11-17)
- ·Swoole4.4协程抢占式调度器详解(2021-11-23)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)