swoft 的 server 监听事件

function,PHP 2018-11-21

swoole的服务的启动基本就是设置好回调函数,对于Tcp服务有workerstart、recevie等进程启动,数据接收的回调事件,对于swoole事件只会触发主Server对象设置的监听事件,所以swoole底层只会触发唯一回调事件,那么对于swoft框架则在次基础上进行了扩展底层事件到达swoole后会分发给swoft的自定义事件
  • swoft中包含有三类事件
swoole server的回调事件
swoft server的事件,基于swoole的回调处理,扩展了一些可用事件以增强自定义性
应用内的自定义事件管理和使用。也是我们通常了解和使用的事件管理了。
  • swoole server回调事件就不说了,swoole练习中很容易做到,接下来我们看看swoft server事件,用swoole onworkerStart作为一个例子实验
    /**
     * Class HttpServerListener
     * @package App\Boot
     * @ServerListener(event=SwooleEvent::ON_WORKER_START)
     */
    class HttpServerListener implements WorkerStartInterface
    {
        public function onWorkerStart(Server $server, int $workerId, bool $isWorkerr)
        {
            echo $workerId."is started \n";
        }
    }
  • httpserver监听事件中,在注解中添加了SWOOLEevent 事件 on_worker_start
  • 实现workerstart接口 的onworkerstart的方法
    /**
     * Class TcpServerListener
     * @ServerListener(event=SwooleEvent::ON_WORKER_START)
     * @package App\Boot
     */
    class TcpServerListener implements WorkerStartInterface
    {
        public function onWorkerStart(Server $server, int $workerId, bool $isWorkerr)
        {
            echo $workerId."is started\n";
        }

    }
  • tcpserver事件也实现了workerstart方法
  • 这样的话在swoole worker进程启动后会通过swoole自身的onworkerstart方法转发到我们自定义的两个监听事件中
  • 来看看运行结果吧,我们这里打印了启动的worker进程id
  • QQ截图20181121211121.png
  • 可以看到答应了两次进程信息,这样的话是不是很方便呢,可以在自定义事件中任意操作swoole生命周期中的事件,同时是隔离创建的
  • 接下来看看swoft框架带有那些事件吧 查看SwooleEvent 源码看看实现了哪些事件

private static $handlerFunctions = [

    self::ON_START         => 'onStart',
    self::ON_WORKER_START  => 'onWorkerStart',
    self::ON_MANAGER_START => 'onManagerStart',
    self::ON_REQUEST       => 'onRequest',
    self::ON_TASK          => 'onTask',
    self::ON_PIPE_MESSAGE  => 'onPipeMessage',
    self::ON_FINISH        => 'onFinish',
    self::ON_CONNECT       => 'onConnect',
    self::ON_RECEIVE       => 'onReceive',
    self::ON_CLOSE         => 'onClose',
    self::ON_BEFORE_START  => 'onBeforeStart',
    // for ws
    self::ON_OPEN  => 'onOpen',
    self::ON_MESSAGE  => 'onMessage',
    self::ON_HAND_SHAKE  => 'onHandshake',
];
  • 可以看到整个生命周期中的事件基本都有,比如http的onrequest接受数据 websocket的onmessage数据 socket的onreceive接受数据

本文由 小东@xiaodo 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。