swoole进程初识「建议收藏」

swoole进程初识

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

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

安装环境

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

gcc-4.4+
make
autoconf

PECL安装

pecl install swoole

php.ini 配置

extension=swoole.so

查看是否安装成功

php -m | grep swoole
> swoole

swoole升级

查看当前版本

php --ri swoole | grep Version
#结果
> Version => 1.9.6

pecl升级

pecl upgrade swoole                                         

swoole进程初识

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

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

server实例代码

server-process.php

$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个)

$ 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进程关系

Master进程:
    启动:onStart
    关闭:onShutdown
Manager进程:
    启动:onManagerStart
    关闭:onManagerStop
Worker进程:
    启动:onWorkerStart
    关闭:onWorkerStop

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

$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出来的结果

# 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

swoole进程初识「建议收藏」

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • lede旁路由作用,【旁路由】LEDE/OpenWrt作为旁路由辅助网关(目前最优解)OpenWrt网关旁路由设置…

    lede旁路由作用,【旁路由】LEDE/OpenWrt作为旁路由辅助网关(目前最优解)OpenWrt网关旁路由设置…主路由一般安装爱快或者ROS,主要负责PPPOE拨号、实现多拨、流控、宽带叠加等功能,辅路由一般安装OpenWrt用于实现去广告、网易云音乐听歌等功能。旁路由一般选择单网口的设备安装OpenWrt,也可以使用群晖主机虚拟一个OpenWrt软路由。主路由:192.168.10.1旁路由:192.168.10.200第一步:设置OpenWrt旁路由1、登录OpenWrt后台,关闭DHCP,DHCP由主…

  • HTTP与TCP的区别和联系[通俗易懂]

    HTTP与TCP的区别和联系[通俗易懂]     相信不少初学应用网络程序开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。一、基本概念1、TCP连接     手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。     建立起一个TCP…

  • 用户态和内核态的简单理解「建议收藏」

    用户态和内核态的简单理解「建议收藏」文章目录linux基础系统调用和库函数的区别什么是用户态和内核态用户态和内核态的相互转换linux基础linux的kernel内核外是系统调用,系统调用外是shell、库函数系统调用和库函数的区别内核:屏蔽了调用各硬件资源的细节系统调用:内核提供给用户调用的接口,但系统调用的可移植性差移植性差的原因:windows、linux内核的系统调用是不同的,比如:同一个功能提供给用户的函数名、参数都不相同,会出现从一个系统移植到另一个系统无法正常运行。库函数:为了解决系统调用移植新差的问题,同时封

  • python之懒惰属性(延迟初始化)

    Python对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果。延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求。1.

    2021年12月29日
  • L2-012关于堆的判断(堆)[通俗易懂]

    L2-012关于堆的判断(堆)[通俗易懂]堆题目链接将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被

  • MySQL数据库cpu飙升到500%的话他怎么处理?[通俗易懂]

    MySQL数据库cpu飙升到500%的话他怎么处理?

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号