From 6060f32fa41b1e284bdb52a7550884e321a6bd3d Mon Sep 17 00:00:00 2001
From: tomzhao <tomzhao@localhost.localdomain>
Date: Tue, 21 Dec 2021 17:21:10 +0800
Subject: [PATCH] update
---
ws_server.php | 81 ++++++++++++++++++++++++++--------------
1 files changed, 52 insertions(+), 29 deletions(-)
diff --git a/ws_server.php b/ws_server.php
index e129bd0..bc8a3a1 100644
--- a/ws_server.php
+++ b/ws_server.php
@@ -21,44 +21,51 @@
$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([
- 'task_worker_num' => 8,
- 'enable_coroutine' => true,
- 'task_enable_coroutine' => true
+ // 'task_worker_num' => 8,
+ // 'enable_coroutine' => true,
+ // 'task_enable_coroutine' => true,
+ 'max_conn' => 100000,
]);
- if (!$this->redis) {
- $this->redis = new Redis();
- $this->redis->connect($this->redis_config['host'],$this->redis_config['port'] );
- $host = $this->server_config['allow_ip'];
- $keyList = $this->redis->keys("*{$host}*");
- foreach ($keyList as $key => $value) {
- $this->redis->del($value);
+ */
+ $this->server->on('WorkerStart', function (Swoole\WebSocket\Server $server) {
+ if (!$this->redis) {
+ $this->redis = new Redis();
+ $this->redis->connect($this->redis_config['host'],$this->redis_config['port'] );
+ $host = $this->server_config['allow_ip'];
+ $keyList = $this->redis->keys("*{$host}*");
+ foreach ($keyList as $key => $value) {
+ $this->redis->del($value);
+ }
+ $this->redis->del("{$host}*");
+ $this->redis->close();
}
- $this->redis->del("{$host}*");
- $this->redis->close();
- }
+ });
$this->server->on('start', function (Swoole\WebSocket\Server $server) {
echo "Websocket Server is started at ws://".$this->server_config['host'].":".$this->server_config['port']."\n";
});
$this->server->on('message', function (Swoole\WebSocket\Server $server, $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) {
+ // $server->task($frame);
$ret = array('code' => 0, 'data' => null);
- $frame = $task->data;
$msgData = $this->is_json($frame->data,true);
if($msgData){
$frameData = $msgData;
@@ -70,6 +77,21 @@
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'] );
@@ -231,6 +253,7 @@
function log($title,$folder,$finename,$msg)
{
+ return;
$logs = json_encode($msg);
$msg = "[".date('Y-m-d H:i:s')."]\t- INFO - ".$title." - ".$logs."\n";
//判断目的文件夹是否存在? 如果不存在就生成
--
Gitblit v1.8.0