使用redis将系统消息,发送给所有app用户

初衷
现在有个需求,就是后台发布一个系统消息,所有的用户都将接收后台发布的消息。
这个问题该如何解决?
解决方案

  1. 使用激光推送
    我在代码中使用了第三方工具,使用极光推送,但是发现我们的服务器,再使用用出现了,服务器瘫痪,这个解决方案不可执行

  2. 使用redis缓存
    直接看代码

/**
     * @发送
     */
    public function send(){
        if( !M()->autoCheckToken($_POST) ) $this->error('禁止站外提交!');
        unset($_POST['__hash__']);
        $id = I('id');
        $no = M('Notice')->where(['id'=>$id])->find();
        $data = [
            'is_fans'=>1,
            'is_del'=>1
        ];

        $user = M('User')->where($data)->select();
        if (M('Notice')->where(['id'=>$id])->save(['status'=>2,'stime'=>time()])){

            // $redis = new \Redis();
            // $redis->connect('127.0.0.1',6379);

            foreach ($user as $k=>$v){

                //入栈
                $a = serialize($v);
                $redis->rpush("notice",$a);


                // M('Message')->add(['type'=>1,'user_id2'=>$v['user_id'],'content'=>$no['content'],'intime'=>time(),'date'=>date('Y-m-d',time())]);

                // //极光推送
                // push5($v['user_id'],$no['content'],$v['alias'],'',1);

                // set_time_limit(0);
            }


            $this->success('发送成功!',U('message'));
        }else{
            $this->error('发送失败',U('message'));
        }
    }
/**
     * redis发送系统通知
     */
    public function send_pop(){
        $no = M('Notice')->where(array('status'=>2))->order('id desc')->limit(1)->find();

        $redis = new \Redis();
        $redis->connect('127.0.0.1',6379);
        for ($i=1;$i<1000;$i++){  
            $data = $redis->LPOP('notice');  
            if (!empty($data)) {  

                $res = unserialize($data); 

                M('Message')->add(['type'=>1,'user_id2'=>$res['user_id'],'content'=>$no['content'],'intime'=>time(),'date'=>date('Y-m-d',time())]);

                //极光推送
                // push5($res['user_id'],$no['content'],$res['alias'],'',1); 
            }else{
                break;
            }  
            // sleep(rand() % 3);  
        } 
    }

猜你喜欢

转载自blog.csdn.net/qq_29202427/article/details/81103186