前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >swoole进程初识「建议收藏」

swoole进程初识「建议收藏」

作者头像
全栈程序员站长
发布2022-07-11 14:35:51
2600
发布2022-07-11 14:35:51
举报

大家好,又见面了,我是全栈君。

swoole是事件驱动的,server.php一直监听端口,当客户端有数据流过去,则进行监听读取,并进处理。

安装环境

应该保证系统中安装了如下软件

代码语言:javascript
复制
gcc-4.4+
make
autoconf

PECL安装

代码语言:javascript
复制
pecl install swoole

php.ini 配置

代码语言:javascript
复制
extension=swoole.so

查看是否安装成功

代码语言:javascript
复制
php -m | grep swoole
> swoole

swoole升级

查看当前版本

代码语言:javascript
复制
php --ri swoole | grep Version
#结果
> Version => 1.9.6

pecl升级

pecl upgrade swoole

swoole进程初识

swoole 默认是多进程模式 Master进程 / Manager进程 / Worker进程 / Task进程

swoole进程初识「建议收藏」
swoole进程初识「建议收藏」
swoole进程初识「建议收藏」
swoole进程初识「建议收藏」

server实例代码

server-process.php

代码语言:javascript
复制
$serv = new swoole_server('127.0.0.1', 9501);
$serv->set([
    'worker_num' => 2,
    'task_worker_num' => 1,
]);
$serv->on('Connect', function ($serv, $fd) {
});
$serv->on('Receive', function ($serv, $fd, $fromId, $data) {
});
$serv->on('Close', function ($serv, $fd) {
});
$serv->on('Task', function ($serv, $taskId, $fromId, $data) {
});
$serv->on('Finish', function ($serv, $taskId, $data) {
});

$serv->start();

对实例代码 进行pstree进程关系

pstree的结果有5个进程,因为swoole的进程模型是(Master-Manager-Worker),5个进程 = master进程(1个) + manager进程(1个) + worker_num(2个) + task_worker_num(1个)

代码语言:javascript
复制
$ pstree | grep server-process

 | |   \-+= 02548 php server-process.php
 | |     \-+- 02549 php server-process.php
 | |       |--- 02550 php server-process.php
 | |       |--- 02551 php server-process.php
 | |       \--- 02552 php server-process.php
 |     \--- 02572 grep server-process

从结果可以看出: 02548 是Master进程,它处于“root”层级 02549 是Manager进程 Worker进程和Task进程就是 02550、02551和02552

设置进程名称备注,再进行pstree进程关系

代码语言:javascript
复制
Master进程:
    启动:onStart
    关闭:onShutdown
Manager进程:
    启动:onManagerStart
    关闭:onManagerStop
Worker进程:
    启动:onWorkerStart
    关闭:onWorkerStop

mac下不支持swoole_set_process_name函数,可以用centos进行测试

代码语言:javascript
复制
$serv->on("start", function ($serv){
    swoole_set_process_name('server-process: master');
});
// 以下回调发生在Manager进程
$serv->on('ManagerStart', function ($serv){
    swoole_set_process_name('server-process: manager');
});
$serv->on('WorkerStart', function ($serv, $workerId){
    if($workerId < $serv->setting['worker_num']) {
        // $workerId = 0~worker_num之间,则为worker进程
        swoole_set_process_name("server-process: worker");
    } else {
        // $workerId >= worker_num之间,则为task进程
        swoole_set_process_name("server-process: task");
    }
});

ps出来的结果

代码语言:javascript
复制
# ps aux | grep server-process
root     27546  xxx... server-process: master
root     27547  xxx... server-process: manager
root     27549  xxx... server-process: task worker
root     27550  xxx... server-process: worker
root     27551  xxx... server-process: worker
root     27570  xxx... grep --color=auto simple

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111889.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装环境
  • PECL安装
  • php.ini 配置
  • 查看是否安装成功
  • swoole升级
    • 查看当前版本
      • pecl升级
      • swoole进程初识
      • server实例代码
        • 对实例代码 进行pstree进程关系
          • 设置进程名称备注,再进行pstree进程关系
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档