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