zoukankan      html  css  js  c++  java
  • php线上预览日志--3.websocket服务部署

    chrome前端扩展已经准备完毕,现在开始准备websocket服务端。

    这里我采用的是tp5.1+swoole+redis的方案。整体逻辑是,如果拥有注册的client_id,才能接收信息,其他人不展示。这样可以指定特定的一部分人看到日志。

    下面是具体的代码实现:

    <?php
    
    
    namespace appswoole;
    
    
    use thinkcachedriverRedis;
    use thinkswooleServer;
    
    class WebSocket extends Server
    {
        protected $host = '0.0.0.0';
        protected $port = 9502;
        protected $serverType = 'socket';
        protected $option = [
            'worker_num'=> 4,
            'daemonize'    => false,
            'backlog'    => 128
        ];
        public function onMessage($server, $frame)
        {
            $redis = new Redis();
            $redis->connect('127.0.0.1', 6379);
            $arr = json_decode($frame->data,true);
            if(isset($arr['type']) && $arr['type']== 'connect'){
                //判断是否具有权限
                if(in_array($arr['client'],config("account."))){
                    $redis->hset("client_list",$arr['client'],$frame->fd);
                }
    
            }else if(isset($arr['type']) && $arr['type']== 'close'){
                $redis->hdel("client_list",$arr['client']);
            }else{
    
            }
            $list = $redis->hGetAll("client_list");
            foreach($list as $k=>$v) {
                $server->push($v, $frame->data);
            }
    
        }
        public function onOpen($server,$requst){
    
        }
        public function onClose($server,$fd){
            $redis = new Redis();
            $redis->connect('127.0.0.1', 6379);
            $redis->hdel("client_list");
        }
        public function onWorkerStart($server,$workerId){
            if($workerId==0){
                $redis = new Redis();
                $redis->connect('127.0.0.1', 6379);
                $list = $redis->hGetAll("client_list");
                foreach($list as $k=>$v){
                    $redis->hdel("client_list",$k);
                }
    
            }
    
        }
    
    
    
    }
  • 相关阅读:
    REDELK的安装和使用
    Palo Alto GlobalProtect上的PreAuth RCE
    渗透 Facebook 的思路与发现
    抓取腾讯视频MP4文件
    JS中整数的取整、取余、向上取整
    centos7安装docker
    业界难题-“跨库分页”的四种方案(转)
    centos7设置时间
    简单实现Shiro单点登录(自定义Token令牌)
    nginx 反向代理时丢失端口的解决方案(转)
  • 原文地址:https://www.cnblogs.com/callmelx/p/12131046.html
Copyright © 2011-2022 走看看