美文网首页
Swoole ThinkPHP5.1实现图文直播推广功能

Swoole ThinkPHP5.1实现图文直播推广功能

作者: HueyYao | 来源:发表于2020-12-28 21:40 被阅读0次

    Swoole ThinkPHP5.1实现图文直播推广功能

    通过前端ajax讲数据通过控制器发送到客户端

    首先时Live.php接收数据

    <?php
    namespace app\admin\controller;
    use app\common\lib\Util;
    use app\common\lib\redis\Predis;
    class Live
    {
        public function push() {
    
            if(empty($_GET)) {
                return Util::show(config('code.error'), 'error');
            }  
            $teams = [
                1 => [
                    'name' => '马刺',
                    'logo' => '/live/imgs/team1.png',
                ],
                4 => [
                    'name' => '火箭',
                    'logo' => '/live/imgs/team2.png',
                ],
            ];
    
            $data = [
                'type' => intval($_GET['type']),
                'title' => !empty($teams[$_GET['team_id']]['name']) ?$teams[$_GET['team_id']]['name'] : '直播员',
                'logo' => !empty($teams[$_GET['team_id']]['logo']) ?$teams[$_GET['team_id']]['logo'] : '',
                'content' => !empty($_GET['content']) ? $_GET['content'] : '',
                'image' => !empty($_GET['image']) ? $_GET['image'] : '',
            ];
            // 获取连接的用户
            // 赛况的基本信息入库   2、数据组织好  push到直播页面
            $taskData = [
                'method' => 'pushLive',
                'data' => $data
            ];
            $_POST['ws_server']->task($taskData);
            return Util::show(config('code.success'), 'ok');
        }
    
    }
    
    

    通过_POST['ws_server']->task(taskData);服务端通过调度任务来发送信息

    在ws.php中

        public function onTask($serv,$taskId,$workerId,$data){
            //分发task任务机制 不同的任务走不同的逻辑
            $obj = new app\common\lib\task\Task;
            $method = $data['method'];
            $flag = $obj->$method($data['data'],$serv);
            return $flag;
        }
    

    实例$obj = new app\common\lib\task\Task;里的对应方法

    Task.php文件如下

    <?php
    namespace app\common\lib\task;
    use app\common\lib\ali\Sms;
    use app\common\lib\redis\Predis;
    use app\common\lib\Redis;
    class Task {
        /**
         * 通过task机制发送赛况实时数据给客户端
         * @param $data
         * @param $serv swoole server对象
         */
        public function pushLive($data, $serv='false') {
            $clients = Predis::getInstance()->sMembers(config('redis.live_game_key'));
            foreach($clients as $fd) {
                $serv->push($fd,json_encode($data));
            }
        }
    }
    

    服务端通过push方法讲数据发送到客户端 客户端前端html代码通过引用live.js来实现数据接收

    live.js文件代码如下

        var wsUrl = "ws://127.0.0.1:8812";      
        var websocket = new WebSocket(wsUrl);
        websocket.onopen = function(evt){
            console.log("con-swoole-success");
        }
        //实例化对象
        websocket.onmessage = function(evt){
            push(evt.data);
            console.log("onmessage()-con-swoole-return-data:"+evt.data);
        }
        //实例化clse时间
        websocket.onclose = function(evt){
            console.log("con-swoole-close");
        }
        websocket.onerror = function(evt,e){
            console.log("error:"+evt.data);
        }
        function push(data){
            data = JSON.parse(data);
            //定义一个数据结构
            html = '<div class="frame">';
            html += '<h3 class="frame-header">';
            html += '<i class="icon iconfont icon-shijian"></i>第'+data.type+'节 02:30';
            html += '</h3>';
            html += '<div class="frame-item">';
            html += '<span class="frame-dot"></span>';
            html += '<div class="frame-item-author">';
            if(data.logo){
                html += '<img src="'+data.logo+'" width="20px" height="20px" />';
            }
            html += data.title;
            html += '</div>';
            html += '<p>'+data.content+'</p>';
            if(data.image){
                html += '<img src="'+data.image+'" width="40%"/>';
            }
            html += '</div>';
            html += '</div>';
            $('#match-result').prepend(html);
        }
    
    

    相关文章

      网友评论

          本文标题:Swoole ThinkPHP5.1实现图文直播推广功能

          本文链接:https://www.haomeiwen.com/subject/jixxoktx.html