swoole深入学习——tcp Server和tcp Client

本文详细介绍了Swoole中的TCP Server和TCP Client的使用,包括同步与异步客户端的实现,Server与Client的交互,以及Task Worker在处理耗时任务中的角色。还探讨了Swoole的架构,强调了Master、Manager和Worker进程的功能,以及TaskWorker如何提高服务器响应速度。最后,展示了Swoole的多线程Reactor+多进程Worker结构,解释了请求处理流程。
摘要由CSDN通过智能技术生成

这节来学习Swoole最基础的ServerClient。会通过创建一个tcp Server来讲解。

server

<?php
class Server
{
    private $serv;

    public function __construct()
    {
        $this->serv = new Swoole\Server('127.0.0.1', 9501);

        //当启动一个Swoole应用时,一共会创建2 + n + m个进程,2为一个Master进程和一个Manager进程,其中n为Worker进程数。m为TaskWorker进程数。

        //默认如果不设置,swoole底层会根据当前机器有多少CPU核数,启动对应数量的Reactor线程和Worker进程。我机器为4核的。Worker为4。TaskWorker为0。 

        //下面我来设置worker_num = 10。看下启动了多少个进程

        $this->serv->set([
            'worker_num' => 10,
            //'task_worker_num' => 2,
            'deamonize' => true,
        ]);

        //启动10个work,总共12个进程。
        /*
          Event git:(master) pstree |grep server.php
    |   \-+= 54172 yangyi php server.php  #Master进程
    |     \-+- 54173 yangyi php server.php  # Manager 进程
    |       |--- 54174 yangyi php server.php  #Work 进程
    |       |--- 54175 yangyi php server.php
    |       |--- 54176 yangyi php server.php
    |       |--- 54177 yangyi php server.php
    |       |--- 54178 yangyi php server.php
    |       |--- 54179 yangyi php server.php
    |       |--- 54180 yangyi php server.php
    |       |--- 54181 yangyi php server.php
    |       |--- 54182 yangyi php server.php
    |       \--- 54183 yangyi php server.php
         *
         */

        //增加新的监控的ip:post:mode
        $this->serv->addlistener("::1", 9500, SWOOLE_SOCK_TCP);

        //监听事件
        /*
         *
         * - onStart
         * - onShutdown
         * - onWorkerStart
         * - onWorkerStop
         * - onTimer
         * - onConnect
         * - onReceive
         * - onClose
         * - onTask
         * - onFinish
         * - onPipeMessage
         * - onWorkerError
         * - onManagerStart
         * - onManagerStop
         */

        $this->serv->on('Start', array($this, 'onStart'));
        $this->serv->on('Connect', array($this, 'onConnect'));
        $this->serv->on('Receive', array($this, 'onReceive'));
        $this->serv->on('Close', array($this, 'onClose'));

        //master进程启动后, fork出Manager进程, 然后触发ManagerStart
        $this->serv->on('ManagerStart', function (\swoole_server $server){
            echo "On manager start.";
        });

        //manager进程启动,启动work进程的时候调用 workid表示第几个id, 从0开始。
        $this->serv->on('WorkerStart', function($serv, $workerId) {
            echo $workerId . '---';
        });

        //当一个work进程死掉后,会触发
        $this->serv->on('WorkerStop', function() {
            echo '--stop';
        });

        //启动
        $this->serv->start();
    }

    //启动server时候会触发。
    public function onStart( $serv ) {
        echo "Start\n";
    }

    //client连接成功后触发。
    public function onConnect( $serv, $fd, $from_id ) {
        $a = $serv->send( $fd, "Hello {$fd}!" );
        //var_dump($a); //成功返回true
    }

    //接收client发过来的请求
   
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值