swoole笔记

11 篇文章 0 订阅

一、服务

TCP、UDP、HTTP
WebSocket特点:

  1. 建立在TCP协议之上
  2. 性能开销小,通信高效
  3. 客户端可以任意与服务端通信
  4. 协议标识符ws wss
  5. 持久化网络通信协议

二、常用命令

查看9501端口

netstat -anp | grep 9501

客户端访问

telnet 127.0.0.1 9501

查看进程数

ps aft | grep swoole.php

三、swoole Task任务

1、使用场景

  • 执行耗时的操作(发送邮件、广播)

2、使用

  • onTask
  • onFinish
  • 设置task_worker_num

面向对象

<?php
/**
 * websocket.php
 * User chenzhuo
 * Date 2020/8/19 5:17 下午
 * Description :
 */

define('HOST', '0.0.0.0');
define('PORT', '08092');


class Ws
{


    public $ws = null;


    public function __construct()
    {
        $this->ws = new Swoole\WebSocket\Server(HOST, PORT);

        $this->ws->set([
            'worker_num' => 2,
            'task_worker_num' => 2
        ]);
        $this->ws->on("open", [$this, 'onOpen']);
        $this->ws->on("message", [$this, 'onMessage']);
        $this->ws->on("task", [$this, 'onTask']);
        $this->ws->on("finish", [$this, 'onFinish']);
        $this->ws->on("close", [$this, 'onClose']);

        $this->ws->start();

    }

    /**
     * 监听ws连接事件
     * @param $ws
     * @param $request
     * User: chenzhuo
     * Date: 2020/8/19 5:29 下午
     */
    public function onOpen($ws, $request) {
        var_dump('连接'.$request->fd);
//        $ws->push($request->fd, 'open-success');


    }

    /**
     * 监听ws消息事件
     * @param $ws
     * @param $frame
     * User: chenzhuo
     * Date: 2020/8/19 5:28 下午
     */
    public function onMessage($ws, $frame) {
        echo "push-message:{$frame->data}\n";
        $data = [
            'task' => 1,
            'fd' => $frame->fd,
        ];
        $ws->task($data);
        $ws->push($frame->fd, "server-push:".date('Y-m-d H:i:s'));

    }



    public function onTask($serv, $taskId, $workerId, $data){
        print_r($data);
        //耗时场景
        sleep(10);
        return "on task finish"; //告诉worker进程
    }


    public function onFinish($serv, $taskId, $data){

        echo "taskId:{$taskId}\n";
        echo "finish-data-success:{$data}";

    }

    /**
     * close
     * @param $ws
     * @param $fd
     * User: chenzhuo
     * Date: 2020/8/19 5:33 下午
     */
    public function onClose($ws, $fd){
        echo "clientid:{$fd}\n";


    }
}

$obj = new Ws();

毫秒定时器

swoole_timer_tick 每隔几秒

swoole_timer_tick(2000, function ($timer_id){
                //每两秒执行
                echo "2s:timeId:{$timer_id}\n";
            });

swoole_timer_after 几秒之后

swoole_timer_after(5000, function () use($ws, $frame) {

           echo "5s-after:\n";
           $ws->push($frame->fd, "server-push".date("Y-m-d H:i:s"));

        });

异步文件IO

异步mysql

使用场景:

异步redis

使用条件

  • redis服务
  • hiredis库
  • 编译swoole需要加入 --enable-async-redis

使用场景:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值