• php线上预览日志--4.websocket客户端


    因为php没有特别好的websocket客户端,swoole的异步客户端已经停止更新了,有兴趣的话可以自己去看文档或者composer全量去搜索相应的三方包。

    下面是我采用的方案:

    基于swoole的建立的websocket 的server,是支持http请求的,所以可以通过onRequest来进行数据的推送:

    WebSocket.php新增:

    public function onRequest($request,$response){
            $url = $request->server['request_uri'];
            if($url=='/send'){
                $level = $request->get['level']??"";
                $level = urldecode($level);
                $log = $request->get['log']??"";
                $log = urldecode($log);
                $arr = [
                    'level'=>$level,
                    'log'=>$log
                ];
                $str = json_encode($arr,true);
                $this->logic($str);
            }
        }

    下面是客户端:

    <?php
    
    
    namespace appswoole;
    
    
    class Client
    {
        public function send($level="",$msg=""){
            $level = urlencode($level);
            $msg = urlencode($msg);
            $url = "127.0.0.1:9502/send?level=".$level."&log=".$msg;
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_HEADER, 0);
            curl_setopt($curl, CURLOPT_TIMEOUT, 1);
            //设置获取的信息以文件流的形式返回,而不是直接输出。
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            //执行命令
            $data = curl_exec($curl);
            // 显示错误信息
            if (curl_error($curl)) {
                print "Error: " . curl_error($curl);
            } else {
                // 打印返回的内容
                var_dump($data);
                curl_close($curl);
            }
        }
    
    }

    注意:通过request获取参数的时候,不要有中文,否则会报错,解决方式是通过urlencode将中文进行转义,在进行消息推送的时候进行解码

    下面是一个php使用实例的场景:

     public function send(){
            try{
                1/0;
            }catch(Exception $e){
                $client = new Client();
                $client->send("error",$e->getMessage());
            }
    
        }

    至此chrome插件+websocket server+websocket client 全部完成

  • 相关阅读:
    Sparc 10 with Simics
    Perl log 0906
    FPGA flow
    SV program与module的区别
    [基础]Verilog的$readmemx介绍
    [转载] 我对验证的一些理解
    我的书单
    boost 1_45_0 boost\cstdint.hpp 在 VS8下的 bug stdint.h 无法找到头文件
    Inside DllMain
    NoSQL数据库笔谈(转载)
  • 原文地址:https://www.cnblogs.com/callmelx/p/12134938.html
Copyright © 2020-2023  润新知