| | |
| | | $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. |
| | | 'poll_thread_num' => 2, //reactor thread num |
| | | '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(); |
| | |
| | | }); |
| | | |
| | | $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; |
| | |
| | | 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'] ); |
| | |
| | | $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": |
| | |
| | | |
| | | function log($title,$folder,$finename,$msg) |
| | | { |
| | | return; |
| | | $logs = json_encode($msg); |
| | | $msg = "[".date('Y-m-d H:i:s')."]\t- INFO - ".$title." - ".$logs."\n"; |
| | | //判断目的文件夹是否存在? 如果不存在就生成 |