websocket 服务端代码

9 阅读1分钟
set([ 'heartbeat_idle_time' => 90, //与heartbeat_check_interval配合使用。表示连接最大允许空闲的时间 'heartbeat_check_interval' => 60, //启用心跳检测,此选项表示每隔多久轮循一次,单位为秒 'ssl_cert_file' => $key_dir . '/tankewan.com.pem', 'ssl_key_file' => $key_dir . '/tankewan.com.key', ]); $ws->on('workerstart', function ($ws, $id) { //https://wiki.swoole.com/wiki/page/325.html /* $db = new Medoo([ 'database_type' => 'mysql', 'database_name' => 'tankewan', 'server' => 'tankewan.mysql.rds.aliyuncs.com', 'username' => 'tanke', 'password' => 'TanKEwan2019', 'charset' => 'utf8', 'prefix' => 'gc_' ]);*/ $db = Medoo::getInstance(); $ws->db = $db; }); //监听WebSocket连接打开事件 $ws->on('Open', function ($ws, $request) { $ws->push($request->fd, "hello, welcome\n"); }); //监听WebSocket消息事件 $ws->on('Message', function ($ws, $frame) { // echo "Message: {$frame->data}\n"; $data = json_decode($frame->data, true); $data['day'] = date("Ymd"); $data['fd'] = $frame->fd; //非成人或者游客超时关闭连接 if ($data['is_adult'] == 0 || $data['is_visitor'] == 1) { $game_time = $ws->db->sum('websocket_log', 'game_time', ['user_id' => $data['user_id'], 'day' => $data['day']]); //var_dump($game_time,$GLOBALS['db']->last()); if ($game_time > 3600) { $ws->push($frame->fd, "server: game_time error"); $ws->close($frame->fd); return; } } $websocket_log = $ws->db->get('websocket_log', "*", ['report_id' => $data['report_id']]); if (empty($websocket_log)) { $data['online_time'] = time(); unset($data['time']); $data['addtime'] = time(); $res = $ws->db->insert('websocket_log', $data); echo "55 \t" . var_dump($ws->db->last()); // var_dump($data,$res); //调用接口上线接口 report($data); } else { $time = time(); $game_time = $time - $websocket_log['online_time']; $ws->db->update('websocket_log', ['game_time' => $game_time], ['id' => $websocket_log['id']]); } $ws->push($frame->fd, "server: {$frame->data}"); }); //监听WebSocket连接关闭事件 $ws->on('Close', function ($ws, $fd) { echo "client-{$fd} is closed\n"; $websocket_log = $ws->db->get('websocket_log', "*", ['fd' => $fd]); if ($websocket_log) { $time = time(); $game_time = $time - $websocket_log['online_time']; $ws->db->update('websocket_log', ['offline_time' => $time, 'game_time' => $game_time, 'status' => 1], ['id' => $websocket_log['id']]); //调用接口上报下线 $websocket_log['offline_time'] = $time; $websocket_log['game_time'] = $game_time; report($websocket_log); } }); $ws->start(); ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/qq_24700495/article/details/144395127