Laravel 中使用 swoole 项目实战开发案例一 (建立 swoole 和前端通信)

最近使用swoole做了项目,里面设计推送信息给界面前端,和无登陆用户的状态监控,以下是本人从中获取的一点心得,有改进的地方请留言评论。

1 开发需要环境

工欲善其事,必先利其器。在正式开发之前我们检查好需要安装的拓展,不要开发中发现这些问题,打断思路影响我们的开发效率。

  • 安装swoole拓展包
  • 安装redis拓展包
  • 安装laravel5.5版本以上

2 Laravel 生成命令行

  1. php artisan make:command SwooleDemo
class SwooleDemo extends Command
{

    protected $signature = 'swoole:demo';

    protected $description = '这是关于swoole的一个测试demo';

    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        $this->line("hello world");
    }
}
  1. 我们分别运行php artisan指令和 php artisan swoole:demo会看到关于这个命令的说明,和输出hello world。(laravel命令行用法详解)

3 命令行逻辑代码

  • 编写一个最基础的swoole命令行逻辑代码
redis = Redis::connection('websocket');
        $server = self::getWebSocketServer();
        $server->on('open',[$this,'onOpen']);
        $server->on('message', [$this, 'onMessage']);
        $server->on('close', [$this, 'onClose']);
        $server->on('request', [$this, 'onRequest']);
        $this->line("swoole服务启动成功 ...");
        $server->start();
    }

    // 获取服务
    public static function getWebSocketServer()
    {
        if (!(self::$server instanceof \swoole_websocket_server)) {
            self::setWebSocketServer();
        }
        return self::$server;
    }
    // 服务处始设置
    protected static  function setWebSocketServer():void
    {
        self::$server  = new \swoole_websocket_server("0.0.0.0", 9502);
        self::$server->set([
            'worker_num' => 1,
            'heartbeat_check_interval' => 60,    // 60秒检测一次
            'heartbeat_idle_time' => 121,        // 121秒没活动的
        ]);
    }

    // 打开swoole websocket服务回调代码
    public function onOpen($server, $request)
    {
        if ($this->checkAccess($server, $request)) {\
            self::$server->push($request->fd,"打开swoole服务成功!");\
        }
    }
    // 给swoole websocket 发送消息回调代码
    public function onMessage($server, $frame)
    {

    }
    // http请求swoole websocket 回调代码
    public function onRequest($request,$response)
    {

    }
    // websocket 关闭回调代码
    public function onClose($serv,$fd)
    {
        $this->line("客户端 {$fd} 关闭");
    }
    // 校验客户端连接的合法性,无效的连接不允许连接
    public function checkAccess($server, $request):bool
    {
        $bRes = true;
        if (!isset($request->get) || !isset($request->get['token'])) {
            self::$server->close($request->fd);
            $this->line("接口验证字段不全");
            $bRes = false;
        } else if ($request->get['token'] !== "123456") {
            $this->line("接口验证错误");
            $bRes = false;
        }
        return $bRes;
    }
    // 启动websocket服务
    public function start()
    {
        self::$server->start();
    }


}
  • 编写websoket js代码




    
    swoole测试
    


这是一个测试

  • 访问前端页面(显示如下说明前后端链接成功)

你可能感兴趣的:(swoole,php)