zhoudw
2022-02-21 a247286b252017c86c7ae5a4f19019c89d6ee60f
ws_server.php
@@ -21,30 +21,28 @@
        $this->redis_config  = $config['redis'];
        $this->server = new Swoole\WebSocket\Server($this->server_config['host'], $this->server_config['port']); // swoole连接
        $this->server->set(array(
            'timeout' => 2.5,  //select and epoll_wait timeout.
            'writer_num' => 2,      //writer thread num
            'worker_num' => 16,      //worker process num,设置启动的worker进程数量,测试时使用1个即可
            'backlog' => 128,       //listen backlog
            'max_conn' => 100000,      // Server最大允许维持多少个tcp连接。超过此数量后,新进入的连接将被拒绝
            'max_request' => 0,     // worker进程在处理完n次请求后结束运行,manager会重新创建一个worker进程。设置为0表示不自动重启。若在Worker进程中需要保存连接信息的服务,需要设置为0
            // dispatch_mode 配置在BASE模式是无效的,因为BASE不存在投递任务
            // 进程数据包分配模式: 1平均分配,2按FD取摸固定分配,3抢占式分配,默认为取摸(dispatch=2),4按IP分配,5按UID分配(需要用户代码中调用$serv->bind_uid(将一个连接绑定1个uid)
            'dispatch_mode'=> 2,
            'daemonize' => false,   // 若设置为true,执行php server.php将转入后台作为守护进程运行
            //'log_file' => '/var/log/swoole-test_ws.log', // daemonize为true时,输出内容才会写入到该日志文件
            //'log_file' => 'swoole-test_ws.log', // daemonize为true时,输出内容才会写入到该日志文件
            //'heartbeat_idle_time' => 2000,        // 连接最大允许空闲的时间(秒),与heartbeat_check_interval配合使用.当dispatch_mode=1/3时,底层会屏蔽onConnect/onClose事件
            //'heartbeat_check_interval' => 2,   // 表示每隔多久轮循一次,单位为秒
        ));
        /*
        // $this->server->set(array(
        //     'worker_num' => 8,      //worker process num,设置启动的worker进程数量,测试时使用1个即可
        //     'backlog' => 128,       //listen backlog
        //     'max_conn' => 100000,      // Server最大允许维持多少个tcp连接。超过此数量后,新进入的连接将被拒绝
        //     'max_request' => 0,     // worker进程在处理完n次请求后结束运行,manager会重新创建一个worker进程。设置为0表示不自动重启。若在Worker进程中需要保存连接信息的服务,需要设置为0
        //     // dispatch_mode 配置在BASE模式是无效的,因为BASE不存在投递任务
        //     // 进程数据包分配模式: 1平均分配,2按FD取摸固定分配,3抢占式分配,默认为取摸(dispatch=2),4按IP分配,5按UID分配(需要用户代码中调用$serv->bind_uid(将一个连接绑定1个uid)
        //     'dispatch_mode'=> 2,
        //     'daemonize' => true,   // 若设置为true,执行php server.php将转入后台作为守护进程运行
        //     'log_file' => 'swoole-test_ws.log', // daemonize为true时,输出内容才会写入到该日志文件
        //     //'log_file' => 'swoole-test_ws.log', // daemonize为true时,输出内容才会写入到该日志文件
        //     //'heartbeat_idle_time' => 2000,        // 连接最大允许空闲的时间(秒),与heartbeat_check_interval配合使用.当dispatch_mode=1/3时,底层会屏蔽onConnect/onClose事件
        //     //'heartbeat_check_interval' => 2,   // 表示每隔多久轮循一次,单位为秒
        // ));
        $this->server->set([
            // 'task_worker_num'       => 8,
            // 'enable_coroutine'      => true,
            // 'task_enable_coroutine' => true,
            'task_worker_num'       => 4,
            'enable_coroutine'      => true,
            'task_enable_coroutine' => true,
            'max_conn'              => 100000,
        ]);
        */
        $this->server->on('WorkerStart', function (Swoole\WebSocket\Server $server) {
            if (!$this->redis) {
                $this->redis = new Redis();
@@ -63,8 +61,23 @@
        });
        $this->server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
            // $server->task($frame);
            $server->task($frame);
            // $ret = array('code' => 0, 'data' => null);
            // $msgData = $this->is_json($frame->data,true);
            // if($msgData){
            //     $frameData = $msgData;
            //     $this->dealMsg($frameData,$frame->fd);
            // }else{
            //     $ret['code'] = -1;
            //     $ret['msg'] = 'data is null or data no json';
            //     $server->push($frame->fd, json_encode($ret));
            //     return;
            // }
        });
        $this->server->on('task', function ($server, $task) {
            $ret = array('code' => 0, 'data' => null);
            $frame = $task->data;
            $msgData = $this->is_json($frame->data,true);
            if($msgData){
                $frameData = $msgData;
@@ -76,21 +89,6 @@
                return;
            } 
        });
        // $this->server->on('task', function ($server, $task) {
        //     $ret = array('code' => 0, 'data' => null);
        //     $frame = $task->data;
        //     $msgData = $this->is_json($frame->data,true);
        //     if($msgData){
        //         $frameData = $msgData;
        //         $this->dealMsg($frameData,$frame->fd);
        //     }else{
        //         $ret['code'] = -1;
        //         $ret['msg'] = 'data is null or data no json';
        //         $server->push($frame->fd, json_encode($ret));
        //         return;
        //     }
        // });
        $this->server->on('close', function ($ser, $fd) {
            $host  = $this->server_config['allow_ip'];
            $this->redis->connect($this->redis_config['host'],$this->redis_config['port'] ); 
@@ -126,7 +124,7 @@
        $url = $msgContent['url'];
        $data = $msgContent['data'];
        $action = substr($url, strrpos($url, "/") + 1);
        $this->log('action','ws','ws',$action);
        // $this->log('action','ws','ws',$action);
        switch ($action)
        {
        case "reg":
@@ -252,7 +250,6 @@
    function log($title,$folder,$finename,$msg)
    {
        return;
        $logs = json_encode($msg);
        $msg = "[".date('Y-m-d H:i:s')."]\t- INFO - ".$title." - ".$logs."\n";
        //判断目的文件夹是否存在? 如果不存在就生成