• 技术文章 >php教程 >php手册

    [PHP]swoole_server几个进程的分工,swoole_server分工

    2016-06-13 08:56:00原创888

    [PHP]swoole_server几个进程的分工,swoole_server分工


    readme.md—/Users/zjh/Documents/我的文章/[PHP]swoole_server几个进程的分工

    [PHP]swoole_server进程的分工


    摘要:Swoole是一个PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。强大的功能,由背后若干个分工明确的进程来实现,这里详细介绍下几个进程的分工,以便入门者更快速的理解Swoole框架。



    目录

    Swoole简介

    Swoole官网

    Swoole:重新定义PHP

    Swoole:PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole虽然是标准的PHP扩展,实际上与普通的扩展不同。普通的扩展只是提供一个库函数。而swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,swoole会自动回调指定的PHP函数。

    功能展示代码片段

    TCP Server

    $serv = new swoole_server("127.0.0.1", 9501);
    $serv->set(array(
        'worker_num' => 8,   //工作进程数量
        'daemonize' => true, //是否作为守护进程
    ));
    $serv->on('connect', function ($serv, $fd){
        echo "Client:Connect.\n";
    });
    $serv->on('receive', function ($serv, $fd, $from_id, $data) {
        $serv->send($fd, 'Swoole: '.$data);
        $serv->close($fd);
    });
    $serv->on('close', function ($serv, $fd) {
        echo "Client: Close.\n";
    });
    $serv->start();
    

    TCP Client

    $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
    //设置事件回调函数
    $client->on("connect", function($cli) {
        $cli->send("hello world\n");
    });
    $client->on("receive", function($cli, $data){
        echo "Received: ".$data."\n";
    });
    $client->on("error", function($cli){
        echo "Connect failed\n";
    });
    $client->on("close", function($cli){
        echo "Connection close\n";
    });
    //发起网络连接
    $client->connect('127.0.0.1', 9501, 0.5);
    

    更多代码片段请见swoole官网。

    主要进程分析

    Master进程

    Master进程主要用来保证Swoole框架机制的运行。它会创建几个功能性的线程:

    Manager进程

    swoole中Worker/Task进程都是由Manager进程Fork并管理的。

    为什么不是Master进程呢,主要原因是Master进程是多线程的,不能安全的执行fork操作。

    Worker进程

    Swoole提供了完善的进程管理机制,当Worker进程异常退出,如发生PHP的致命错误、被其他程序误杀,或达到max_request次数之后正常退出。主进程会重新拉起新的Worker进程。 Worker进程内可以像普通的apache+php或者php-fpm中写代码。不需要像Node.js那样写异步回调的代码。

    Task进程

    Task进程的全称是task_worker进程,是一种特殊的worker进程。所以onWorkerStart在task进程中也会被调用。当$worker_id >= $serv->setting['worker_num']时表示这个进程是task_worker,否则,代表此进程是worker进程。

    进程与事件回调的对应关系

    Master进程内的回调函数

    onStart
    onShutdown
    onMasterConnect
    onMasterClose
    onTimer
    

    Worker进程内的回调函数

    onWorkerStart
    onWorkerStop
    onConnect
    onClose
    onReceive
    onTimer
    onFinish
    

    Task进程内的回调函数

    onTask
    onWorkerStart
    

    Manager进程内的回调函数

    onManagerStart
    onManagerStop
    

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP swoole server 几个 进程 分工 PHP swoole server 几个 进程 分工 re
    上一篇:php模式设计之 注册树模式,php模式设计 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 系统错误• ThinkPHP控制器里javascript代码不能执行的解决方法,thinkphpjavascript• php中header()实现页面跳方法• PHP中的一些经验积累• PHP之判断用户语言跳转网页
    1/1

    PHP中文网