initialize(); function app_redis() { static $redis = null; static $conn = false; if (!$conn) { connect: //定义标签 $redis = new Redis(); try { //建立的Redis短连接,在请求结束后不会自动关闭,相当于持久连接. $conn = $redis->connect(HOST, PORT); $conn = $redis->auth(PASSWORD); $conn = $redis->select(DATABASE); // 连接成功,返回$redis对象,连接失败,返回false. return ($conn === true) ? $redis : false; } catch (Exception $e) { return false; } } else { // 这里假设PHP-FPM在处理一个请求的时间内,Redis连接都是可用的. // 所以只在PHP-CLI下检查Redis连接的状态,进行断线重连. if (php_sapi_name() === 'cli') { try { // ping用于检查当前连接的状态,成功时返回+PONG,失败时抛出一个RedisException对象. // ping失败时警告: // Warning: Redis::ping(): connect() failed: Connection refused // var_dump('AAAAAAAAA', $redis); // echo 'Redis 连接状态' . $redis->ping() . PHP_EOL; @$redis->ping(); if (!$redis->ping()) { goto connect; //跳转到标签出继续执行连接操作 } } catch (Exception $e) { // 信息如 Connection lost 或 Redis server went away echo $e->getMessage(); echo 'Redis 连接失败 重新连接:' . PHP_EOL; // 断线重连 goto connect; } } return $redis; } } //{"from":"thing/product/1581F8HGX254V00A0BPZ/osd","val":{"bid":"f78e5818-9ae0-47a2-a671-f9ed5940a4c2","data":{"81-0-0":{"gimbal_pitch":0,"gimbal_roll":0,"gimbal_yaw":184.43904979204333,"payload_index":"81-0-0","thermal_current_palette_style":0,"thermal_gain_mode":2,"thermal_global_temperature_max":54.8718490600586,"thermal_global_temperature_min":-11.4954891204834,"thermal_isotherm_lower_limit":-20,"thermal_isotherm_state":0,"thermal_isotherm_upper_limit":150,"zoom_factor":0.56782334384858046},"activation_time":1731793516,"attitude_head":-175.8,"attitude_pitch":-2.5,"attitude_roll":-4.1,"battery":{"batteries":[{"capacity_percent":62,"firmware_version":"26.03.00.37","high_voltage_storage_days":6,"index":0,"loop_times":1,"sn":"6Q7PMBHDA100EH","sub_type":0,"temperature":41.1,"type":0,"voltage":15230}],"capacity_percent":62,"landing_power":8,"remain_flight_time":1364,"return_home_power":25},"best_link_gateway":"7CTDLB100A0135","cameras":[{"camera_mode":0,"ir_metering_mode":0,"ir_metering_point":{"temperature":0,"x":0.5,"y":0.5},"ir_zoom_factor":2,"liveview_world_region":{"bottom":0.57610434293746948,"left":0.43082082271575928,"right":0.56011581420898438,"top":0.44691991806030273},"payload_index":"81-0-0","photo_state":0,"photo_storage_settings":["ir","vision"],"record_time":0,"recording_state":0,"remain_photo_num":4473,"remain_record_duration":0,"screen_split_enable":false,"wide_calibrate_farthest_focus_value":36,"wide_calibrate_nearest_focus_value":66,"wide_exposure_mode":1,"wide_exposure_value":16,"wide_focus_mode":2,"wide_focus_state":0,"wide_focus_value":36,"wide_iso":3,"wide_max_focus_value":66,"wide_min_focus_value":34,"wide_shutter_speed":3,"zoom_calibrate_farthest_focus_value":36,"zoom_calibrate_nearest_focus_value":66,"zoom_exposure_mode":1,"zoom_exposure_value":16,"zoom_factor":6.999994214380596,"zoom_focus_mode":2,"zoom_focus_state":0,"zoom_focus_value":36,"zoom_iso":3,"zoom_max_focus_value":66,"zoom_min_focus_value":34,"zoom_shutter_speed":3}],"country":"CN","distance_limit_status":{"distance_limit":5000,"is_near_distance_limit":0,"state":0},"elevation":110.6,"gear":1,"height":1233.1537109375,"height_limit":600,"home_distance":2.7324116230010986,"horizontal_speed":0,"is_near_area_limit":1,"is_near_height_limit":0,"latitude":40.72114645369534,"longitude":109.83766356702714,"maintain_status":{"maintain_status_array":[{"last_maintain_flight_sorties":0,"last_maintain_flight_time":0,"last_maintain_time":0,"last_maintain_type":1,"state":0},{"last_maintain_flight_sorties":0,"last_maintain_flight_time":0,"last_maintain_time":0,"last_maintain_type":2,"state":0},{"last_maintain_flight_sorties":0,"last_maintain_flight_time":0,"last_maintain_time":0,"last_maintain_type":3,"state":0}]},"mode_code":16,"night_lights_state":0,"obstacle_avoidance":{"downside":1,"horizon":1,"upside":1},"position_state":{"gps_number":32,"is_fixed":0,"quality":5,"rtk_number":49},"rc_lost_action":2,"rid_state":true,"rth_altitude":120,"storage":{"total":60397000,"used":24748000},"total_flight_distance":668806.33705822239,"total_flight_sorties":174,"total_flight_time":129771.41709938273,"track_id":"bced3e0b-dfda-4c62-8156-6319d771b3cf","vertical_speed":0,"wind_direction":4,"wind_speed":66},"tid":"4c0c46ea-3111-4b3c-9b43-5cb8b5487f2c","timestamp":1750146328063,"gateway":"7CTDLB100A0135"}} while (1) { $jsonData= app_redis()->rpop("OSD_DRONE_LIST"); if(!$jsonData){ sleep(3); continue; } $redis_data=json_decode($jsonData,true); $topic=$redis_data['from']; $data=$redis_data['val']; $parts = explode('/', $topic); $device_sn = $parts[2]; var_dump($data['data']['latitude']); var_dump($data['data']['longitude']); var_dump($data['data']['height']); var_dump($data['timestamp']); var_dump($data['gateway']); var_dump($device_sn); $save_data=[ 'longitude'=>$data['data']['longitude'], 'latitude'=>$data['data']['latitude'], 'height'=>$data['data']['height'], // 'time'=>$data['timestamp'], 'time'=>intval($data['timestamp']/ 1000), 'gateway'=>$data['gateway'], 'device_sn'=>$device_sn , ]; try { $res = Db::connect('uav')->name('uav_route')->insertGetId($save_data); var_dump($res); } catch (\Exception $e) { // 错误日志或重新连接逻辑 echo "错误: " . $e->getMessage().PHP_EOL; // 重新连接逻辑(示例): Db::connect('uav')->close(); // 关闭现有连接 Db::connect('uav')->connect(); // 重新连接 $res = Db::connect('uav')->name('uav_route')->insertGetId($save_data); var_dump($res); } }