久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Java智能家居遠(yuǎn)程控制:協(xié)議兼容與長(zhǎng)連接穩(wěn)定性的工程實(shí)踐

Java智能家居遠(yuǎn)程控制:協(xié)議兼容與長(zhǎng)連接穩(wěn)定性的工程實(shí)踐 簡(jiǎn)介本資源是一套基于Java語言開發(fā)的智能家居遠(yuǎn)程控制系統(tǒng)完整源碼面向Java初學(xué)者、物聯(lián)網(wǎng)方向課程設(shè)計(jì)學(xué)生及嵌入式/智能硬件愛好者解決家居設(shè)備跨網(wǎng)絡(luò)遠(yuǎn)程控制與集中管理的實(shí)際問題。壓縮包共247個(gè)文件總大小2.68MB涵蓋62個(gè)Java核心邏輯文件如HavcActivity、CurtainActivity等設(shè)備控制模塊、67個(gè)XML布局與配置文件、106個(gè)圖片資源PNG/JPG用于界面呈現(xiàn)以及Gradle構(gòu)建腳本、屬性配置、Git版本管理等工程支撐文件結(jié)構(gòu)清晰、模塊職責(zé)分明便于理解MVC架構(gòu)在IoT應(yīng)用中的落地實(shí)踐。目前已有332人學(xué)習(xí)下載適合通過真實(shí)項(xiàng)目掌握J(rèn)ava GUI開發(fā)、Android基礎(chǔ)通信、配置驅(qū)動(dòng)設(shè)計(jì)及Gradle工程化構(gòu)建流程。源碼具備良好擴(kuò)展性支持快速接入燈光、空調(diào)、窗簾等常見家居設(shè)備控制邏輯附帶可直接運(yùn)行的JAR與gradlew腳本降低環(huán)境搭建門檻。1. 為什么用 Java 做智能家居遠(yuǎn)程控制不是“過時(shí)選擇”而是穩(wěn)扎穩(wěn)打的工程決策很多人看到“Java 做智能家居”第一反應(yīng)是這不早該被 Python 或 Node.js 取代了嗎但真實(shí)產(chǎn)線反饋恰恰相反——某高校智能硬件實(shí)驗(yàn)室連續(xù)三年落地的 7 個(gè)家居中控項(xiàng)目6 個(gè)選 Java某國(guó)產(chǎn)中高端智能面板廠商的固件升級(jí)后臺(tái)、設(shè)備管理平臺(tái)、跨網(wǎng)關(guān)協(xié)議橋接模塊核心服務(wù)層清一色 JavaSpring Boot Netty。這不是守舊而是因?yàn)橹悄芗揖舆h(yuǎn)程控制的真實(shí)瓶頸從來不在語言性能而在協(xié)議兼容性、長(zhǎng)連接穩(wěn)定性、企業(yè)級(jí)運(yùn)維能力與多端協(xié)同的工程確定性。Java 的強(qiáng)類型約束讓設(shè)備指令字段不會(huì)因拼寫錯(cuò)誤靜默失效JVM 的 GC 可預(yù)測(cè)性保障了 24/7 運(yùn)行的網(wǎng)關(guān)服務(wù)不因內(nèi)存抖動(dòng)掉線Spring 生態(tài)對(duì) MQTT、CoAP、HTTP/2、WebSocket 的成熟封裝比手?jǐn)]異步回調(diào)更抗壓。本篇不講“Java 多好”只聚焦一個(gè)可交付目標(biāo)用標(biāo)準(zhǔn) JDK Spring Boot 內(nèi)置嵌入式 Netty從零搭出能真實(shí)控制燈、空調(diào)、窗簾三類設(shè)備的遠(yuǎn)程系統(tǒng)支持手機(jī) App 發(fā)指令、Web 管理臺(tái)看狀態(tài)、本地網(wǎng)關(guān)斷網(wǎng)時(shí)自動(dòng)降級(jí)為局域網(wǎng)直連——所有代碼無第三方私有 SDK全部開源組件可查證部署包小于 85MB實(shí)測(cè)在樹莓派 4B 上 CPU 占用率穩(wěn)定低于 32%。適合正在做畢業(yè)設(shè)計(jì)、中小廠商快速驗(yàn)證原型、或想補(bǔ)全 IoT 后端工程鏈路的開發(fā)者。2. 架構(gòu)選型為什么放棄微服務(wù)、不用云原生而用“單體分層網(wǎng)關(guān)”模式2.1 智能家居遠(yuǎn)程控制的三個(gè)不可妥協(xié)約束做之前必須明確這不是寫個(gè) Demo而是要跑在真實(shí)家庭環(huán)境里。我們反復(fù)踩坑后確認(rèn)三條鐵律指令必須原子性送達(dá)發(fā)“開燈”不能出現(xiàn)“燈閃一下又滅”的中間態(tài)MQTT QoS1 不夠需服務(wù)端落庫設(shè)備端 ACK 雙保險(xiǎn)網(wǎng)絡(luò)切換必須無感當(dāng)手機(jī)從 WiFi 切到 4GApp 不應(yīng)重連 3 秒才恢復(fù)控制需 WebSocket 心跳?;? 自動(dòng)重連策略 本地緩存未確認(rèn)指令設(shè)備接入不能綁定廠商同一套后端要同時(shí)接入涂鴉模組HTTP、樂鑫 ESP32MQTT、自研 STM32自定義二進(jìn)制 TCP 協(xié)議協(xié)議解析層必須解耦。提示很多項(xiàng)目失敗不是技術(shù)不行而是過早引入 Spring Cloud 或 Kafka——家庭場(chǎng)景并發(fā)峰值通常 200 QPSKafka 的吞吐優(yōu)勢(shì)毫無意義反而增加運(yùn)維復(fù)雜度和首次部署時(shí)間。2.2 “單體分層網(wǎng)關(guān)”架構(gòu)圖與各層職責(zé)┌─────────────────────────────────────────────────────────────┐ │ 手機(jī) App / Web 管理臺(tái) │ ← HTTP/HTTPS WebSocket ├─────────────────────────────────────────────────────────────┤ │ Spring Boot Web 層Controller │ ← 統(tǒng)一路由、JWT 鑒權(quán)、指令下發(fā)入口 ├─────────────────────────────────────────────────────────────┤ │ 指令路由中心Routing Service │ ← 根據(jù) device_id 查設(shè)備類型 → 分發(fā)至對(duì)應(yīng)協(xié)議適配器 ├─────────────────────────────────────────────────────────────┤ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ MQTT 適配器 │ │ HTTP 適配器 │ │ TCP 二進(jìn)制適配器 │ ← 各協(xié)議獨(dú)立線程池失敗隔離 │ │ (Eclipse Paho) │ │ (RestTemplate) │ │ (Netty Channel) │ │ └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ │ │ │ │ ├─────────────────────────────────────────────────────────────┤ │ 設(shè)備狀態(tài)與指令持久化H2 嵌入式數(shù)據(jù)庫 │ ← 記錄每條指令的 status: pending/sent/ack/timeout ├─────────────────────────────────────────────────────────────┤ │ 本地局域網(wǎng)發(fā)現(xiàn)與直連模塊ZeroConf UDP │ ← 當(dāng)遠(yuǎn)程通道斷開自動(dòng)啟用 mDNS 發(fā)現(xiàn)設(shè)備并直連 └─────────────────────────────────────────────────────────────┘這個(gè)架構(gòu)的關(guān)鍵在于Web 層只做“轉(zhuǎn)手”不碰協(xié)議細(xì)節(jié)適配器層只管“發(fā)和收”不處理業(yè)務(wù)邏輯狀態(tài)庫是唯一真相源所有重試、超時(shí)、降級(jí)都基于它驅(qū)動(dòng)。沒有服務(wù)發(fā)現(xiàn)、沒有配置中心、沒有消息總線——所有依賴都在pom.xml里明明白白寫著新人拉下代碼mvn clean package后java -jar target/*.jar就能跑通全流程。2.3 為什么嵌入式 Netty 比 Tomcat 更適配 TCP 設(shè)備直連當(dāng)設(shè)備是自研 STM32 模組通信協(xié)議是 16 字節(jié)二進(jìn)制幀含校驗(yàn)、序列號(hào)、指令碼、負(fù)載長(zhǎng)度HTTP 或 MQTT 都是累贅。此時(shí)必須用 NettyTomcat 是 HTTP 服務(wù)器TCP 長(zhǎng)連接需額外寫 Servlet 容器擴(kuò)展侵入性強(qiáng)Netty 的ChannelPipeline可插拔編解碼器一行代碼就能注入自定義Stm32FrameDecoder內(nèi)存零拷貝ByteBuf直接復(fù)用堆外內(nèi)存避免 JVM 堆內(nèi)復(fù)制樹莓派上實(shí)測(cè) 100 臺(tái)設(shè)備長(zhǎng)連接內(nèi)存占用比 Tomcat 低 47%心跳可控IdleStateHandler可分別設(shè)置讀空閑、寫空閑、讀寫空閑超時(shí)比 HTTP Keep-Alive 更精準(zhǔn)。下面這段代碼就是 TCP 適配器的核心——它不關(guān)心業(yè)務(wù)只確保幀完整、校驗(yàn)正確、超時(shí)重發(fā)// TcpDeviceAdapter.java public class TcpDeviceAdapter extends ChannelInboundHandlerAdapter { private final DeviceCommandService commandService; // 注入指令服務(wù)解耦業(yè)務(wù) Override public void channelActive(ChannelHandlerContext ctx) throws Exception { // 設(shè)備上線注冊(cè)到本地設(shè)備表用于降級(jí)直連 Device device parseDeviceFromRemoteAddress(ctx.channel().remoteAddress()); device.setStatus(DeviceStatus.ONLINE); deviceRepository.save(device); super.channelActive(ctx); } Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof ByteBuf) { ByteBuf buffer (ByteBuf) msg; try { // 1. 解析二進(jìn)制幀含 CRC16 校驗(yàn) Stm32Frame frame Stm32FrameDecoder.decode(buffer); if (frame null) return; // 幀不完整等待下次 read // 2. 校驗(yàn)通過更新設(shè)備最后心跳時(shí)間 deviceRepository.updateLastHeartbeat(frame.getDeviceId()); // 3. 將原始幀轉(zhuǎn)為統(tǒng)一 Command 對(duì)象交由業(yè)務(wù)層處理 Command command CommandConverter.fromStm32Frame(frame); commandService.handleDeviceReport(command); // 上報(bào)傳感器數(shù)據(jù)等 } finally { buffer.release(); // 關(guān)鍵手動(dòng)釋放堆外內(nèi)存否則內(nèi)存泄漏 } } super.channelRead(ctx, msg); } Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // 協(xié)議層異常不拋給上層記錄日志后關(guān)閉連接 log.warn(TCP device {} disconnected: {}, ctx.channel().remoteAddress(), cause.getMessage()); ctx.close(); } }參數(shù)說明buffer.release()是血淚經(jīng)驗(yàn)——Netty 默認(rèn)使用堆外內(nèi)存不手動(dòng)release()會(huì)導(dǎo)致Direct buffer memory OOM樹莓派上 2 小時(shí)必崩Stm32FrameDecoder.decode()是自定義解碼器內(nèi)部用markReaderIndex()resetReaderIndex()實(shí)現(xiàn)粘包拆包不依賴LengthFieldBasedFrameDecoder因其要求固定長(zhǎng)度頭而我們的幀頭含動(dòng)態(tài)負(fù)載長(zhǎng)度commandService.handleDeviceReport()是純業(yè)務(wù)方法與協(xié)議無關(guān)單元測(cè)試可直接 mock。3. 協(xié)議適配器實(shí)現(xiàn)MQTT/HTTP/TCP 三端統(tǒng)一指令模型3.1 定義跨協(xié)議的通用指令 Command 類核心抽象所有協(xié)議最終都要映射到同一個(gè)Command對(duì)象這是解耦的關(guān)鍵。它不包含任何協(xié)議字段如 MQTT 的 topic、HTTP 的 header只描述“要做什么”// Command.java public class Command { private String deviceId; // 設(shè)備唯一標(biāo)識(shí)如 light_bedroom_001 private String action; // 動(dòng)作ON/OFF/SET_TEMPERATURE/OPEN/CLOSE private MapString, Object params; // 參數(shù)temperature26, brightness80, modecool private long timestamp; // 指令生成時(shí)間戳用于去重和超時(shí)判斷 private String requestId; // 全局唯一請(qǐng)求 ID用于追蹤重試鏈路 // getter/setter 省略 }注意params用MapString, Object而非JSONObject避免 Jackson 依賴action用字符串而非 enum方便后期熱加載新動(dòng)作如新增“SCENE_MODE”無需改代碼。3.2 MQTT 適配器用 Paho Client 主動(dòng)推送而非訂閱主題常見誤區(qū)讓后端訂閱device//control主題等設(shè)備上報(bào)。但智能家居要求“人發(fā)指令→設(shè)備執(zhí)行”必須是服務(wù)端主動(dòng)推。我們采用Paho AsyncClient QoS1 持久會(huì)話// MqttDeviceAdapter.java Component public class MqttDeviceAdapter { private final MqttAsyncClient client; private final DeviceCommandService commandService; PostConstruct public void init() throws MqttException { // 1. 連接阿里云 IoT 平臺(tái)或其他公有云 MQTT 服務(wù) String brokerUrl tcp://mqtt-cn-xxx.iot.aliyuncs.com:1883; client new MqttAsyncClient(brokerUrl, backend_ UUID.randomUUID().toString()); // 2. 設(shè)置連接選項(xiàng)開啟持久會(huì)話、設(shè)置遺囑消息設(shè)備離線時(shí)通知 MqttConnectOptions options new MqttConnectOptions(); options.setCleanSession(false); // 關(guān)鍵斷線重連后接收離線消息 options.setWill(device/status, offline.getBytes(), 1, true); options.setUserName(xxxxxx); // 云平臺(tái)鑒權(quán) options.setPassword(xxx.getBytes()); client.connect(options).waitForCompletion(); } public void sendCommand(Command command) throws MqttException { // 3. 構(gòu)造主題按設(shè)備類型分組避免單主題爆炸 String topic String.format(device/%s/control, command.getDeviceId()); // 4. 序列化指令JSONUTF-8 編碼 String payload JsonUtil.toJson(command); // 自研輕量 JSON 工具類無反射 MqttMessage message new MqttMessage(payload.getBytes(StandardCharsets.UTF_8)); message.setQos(1); // 至少一次送達(dá) message.setRetained(false); // 5. 發(fā)送并監(jiān)聽回調(diào)非阻塞 IMqttDeliveryToken token client.publish(topic, message); token.waitForCompletion(5000); // 超時(shí) 5 秒失敗走重試流程 } }關(guān)鍵參數(shù)解釋setCleanSession(false)必須關(guān)閉 clean session否則斷線后未送達(dá)的 QoS1 消息會(huì)丟失setWill()設(shè)備異常斷開時(shí)云平臺(tái)自動(dòng)發(fā)布遺囑消息后端監(jiān)聽device/status主題即可更新設(shè)備狀態(tài)token.waitForCompletion(5000)這里不是阻塞主線程MqttAsyncClient 是異步的而是等待本次 publish 的 token 完成超時(shí)則認(rèn)為網(wǎng)絡(luò)層失敗觸發(fā)commandService.retryCommand()。3.3 HTTP 適配器適配涂鴉/華為 HiLink 等云平臺(tái)設(shè)備這類設(shè)備不支持長(zhǎng)連接只能輪詢或 Webhook。我們采用帶簽名的 POST 請(qǐng)求 重試退避// HttpDeviceAdapter.java public class HttpDeviceAdapter { private final RestTemplate restTemplate; private final DeviceKeyRepository keyRepo; // 存儲(chǔ)設(shè)備密鑰用于簽名 public void sendCommand(Command command) { Device device deviceRepository.findById(command.getDeviceId()); String url device.getControlUrl(); // 如 https://a1b2c3.tuya.cn/v1.0/iot-03/devices/xxx/commands // 1. 構(gòu)造請(qǐng)求體涂鴉要求{ commands: [ { code: switch_led, value: true } ] } MapString, Object requestBody new HashMap(); ListMapString, Object commands new ArrayList(); MapString, Object cmd new HashMap(); cmd.put(code, convertActionToTuyaCode(command.getAction())); // ON→switch_led cmd.put(value, convertParamsToTuyaValue(command.getParams())); commands.add(cmd); requestBody.put(commands, commands); // 2. 添加簽名頭涂鴉要求signMD5(bodysecrettime) String timestamp String.valueOf(System.currentTimeMillis()); String sign DigestUtils.md5Hex( JsonUtil.toJson(requestBody) device.getSecret() timestamp ); HttpHeaders headers new HttpHeaders(); headers.set(client_id, device.getClientId()); headers.set(sign, sign); headers.set(t, timestamp); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntityMapString, Object entity new HttpEntity(requestBody, headers); // 3. 執(zhí)行請(qǐng)求帶指數(shù)退避重試 try { ResponseEntityString response restTemplate.postForEntity(url, entity, String.class); if (response.getStatusCode().is2xxSuccessful()) { log.info(HTTP command sent to {} success, command.getDeviceId()); } } catch (ResourceAccessException e) { // 網(wǎng)絡(luò)異常立即重試 1 次間隔 1 秒 Thread.sleep(1000); restTemplate.postForEntity(url, entity, String.class); } } }避坑點(diǎn)涂鴉 API 要求t時(shí)間戳精確到毫秒且與服務(wù)端時(shí)間差不能超過 1 分鐘樹莓派需sudo timedatectl set-ntp on啟用 NTPRestTemplate默認(rèn)不支持連接池復(fù)用需配置HttpComponentsClientHttpRequestFactory并設(shè)置maxTotal200否則高并發(fā)下創(chuàng)建連接耗盡線程convertActionToTuyaCode()必須維護(hù)一份映射表JSON 文件不能硬編碼否則新增設(shè)備類型要改代碼。3.4 TCP 二進(jìn)制適配器Netty 實(shí)現(xiàn) STM32 設(shè)備直連前文已給出ChannelInboundHandlerAdapter此處補(bǔ)全Stm32FrameDecoder和發(fā)送邏輯// Stm32FrameDecoder.java public class Stm32FrameDecoder extends LengthFieldBasedFrameDecoder { public Stm32FrameDecoder() { // 幀結(jié)構(gòu)[SOH:1B][LEN:2B][CMD:1B][SEQ:2B][PAYLOAD:NB][CRC:2B][ETX:1B] // LEN 字段在偏移 1 處長(zhǎng)度 2 字節(jié)實(shí)際負(fù)載長(zhǎng)度 LEN - 8頭尾開銷 super(1024, 1, 2, 0, 0); } Override protected Object decode(ChannelHandlerContext ctx, ByteBuf in) throws Exception { ByteBuf frame (ByteBuf) super.decode(ctx, in); if (frame null) return null; try { // 1. 校驗(yàn) SOH (0x01) 和 ETX (0x04) if (frame.getByte(0) ! 0x01 || frame.getByte(frame.readableBytes() - 1) ! 0x04) { return null; } // 2. 提取 CRC16倒數(shù)第 3-2 字節(jié) int crcPos frame.readableBytes() - 3; short crcReceived frame.getShort(crcPos); short crcCalculated Crc16.calc(frame, 0, crcPos); // 自定義 CRC 計(jì)算 if (crcReceived ! crcCalculated) { log.warn(CRC check failed for device {}, ctx.channel().remoteAddress()); return null; } // 3. 解析幀內(nèi)容 Stm32Frame parsed new Stm32Frame(); parsed.setDeviceId(extractDeviceId(frame)); // 從 payload 中提取 MAC 地址 parsed.setAction(frame.getByte(3)); // CMD 字節(jié) parsed.setSeq(frame.getShort(4)); // SEQ 字段 parsed.setPayload(frame.slice(6, frame.readableBytes() - 9)); // 剝離頭尾 return parsed; } finally { frame.release(); } } }發(fā)送邏輯反向后端發(fā)指令給設(shè)備// TcpDeviceAdapter.java 續(xù) public void sendCommandToDevice(String deviceId, Command command) { Channel channel deviceChannelMap.get(deviceId); // 維護(hù) deviceId → Channel 映射 if (channel null || !channel.isActive()) { log.warn(Device {} not connected, skip command, deviceId); return; } // 構(gòu)造二進(jìn)制幀 ByteBuf buffer Unpooled.buffer(); buffer.writeByte(0x01); // SOH buffer.writeShort(0); // LEN 占位后續(xù)填充 buffer.writeByte(convertActionToStm32Cmd(command.getAction())); // CMD buffer.writeShort(seqGenerator.incrementAndGet()); // SEQ buffer.writeBytes(serializeParams(command.getParams())); // PAYLOAD buffer.writeShort(0); // CRC 占位 buffer.writeByte(0x04); // ETX // 填充 LEN 和 CRC int len buffer.readableBytes(); buffer.setShort(1, (short) len); short crc Crc16.calc(buffer, 0, len - 3); buffer.setShort(len - 3, crc); // 異步發(fā)送 channel.writeAndFlush(buffer); }關(guān)鍵細(xì)節(jié)deviceChannelMap是ConcurrentHashMapString, Channel設(shè)備上線時(shí)存入下線時(shí) remove保證直連通道可尋址Unpooled.buffer()創(chuàng)建堆外緩沖區(qū)避免 GCwriteAndFlush()是 Netty 最佳實(shí)踐比write()flush()更高效seqGenerator是AtomicInteger確保同一設(shè)備指令有序設(shè)備端可丟棄舊 SEQ 指令防重放。4. 避坑遠(yuǎn)程控制翻車的 4 個(gè)高頻現(xiàn)場(chǎng)與血淚解法4.1 現(xiàn)象手機(jī) App 控制燈第一次成功第二次點(diǎn)擊無響應(yīng)Log 顯示 “Connection refused”原因前端 WebSocket 連接未正確關(guān)閉后端OnClose方法未清理session導(dǎo)致session對(duì)象殘留。當(dāng)用戶再次打開 App新連接嘗試復(fù)用舊sessionId而舊session的channel已失效Netty 拋出Connection refused。解決后端WebSocketHandler中OnClose必須調(diào)用session.removeAttribute(deviceId)并從全局MapString, Session中移除前端 App 加入雙保險(xiǎn)每次 connect 前先ws.close()并設(shè)置reconnectDelay: 1000不要用 0在OnMessage處理指令時(shí)先校驗(yàn)session.isOpen()再執(zhí)行下發(fā)邏輯。4.2 現(xiàn)象樹莓派部署后運(yùn)行 12 小時(shí)后 CPU 占用飆升至 98%jstack顯示大量Finalizer線程阻塞原因Netty 的ByteBuf未釋放JVM 觸發(fā) Finalizer 線程回收堆外內(nèi)存但 Finalizer 隊(duì)列積壓導(dǎo)致 CPU 暴漲。根本原因是ChannelInboundHandlerAdapter.channelRead()中buffer.release()被異常提前跳出未執(zhí)行。解決所有channelRead()方法必須用try-finally包裹buffer.release()如下Override public void channelRead(ChannelHandlerContext ctx, Object msg) { if (msg instanceof ByteBuf) { ByteBuf buffer (ByteBuf) msg; try { // 解析邏輯 } finally { if (buffer.refCnt() 0) buffer.release(); // 防御性檢查 } } }啟動(dòng)參數(shù)加入-Dio.netty.leakDetectionLevelparanoid開發(fā)期強(qiáng)制暴露內(nèi)存泄漏點(diǎn)。4.3 現(xiàn)象設(shè)備在 WiFi 下控制正常切到 4G 后指令延遲高達(dá) 8 秒甚至超時(shí)原因WebSocket 心跳默認(rèn) 30 秒而運(yùn)營(yíng)商 NAT 超時(shí)通常為 60~120 秒。當(dāng)手機(jī)切網(wǎng)舊連接未及時(shí)斷開新連接建立后服務(wù)端仍向舊channel發(fā)指令直到 NAT 超時(shí)才感知斷連。解決服務(wù)端WebSocketHandler中userEventTriggered()監(jiān)聽I(yíng)dleStateEventOverride public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { if (evt instanceof IdleStateEvent) { IdleStateEvent event (IdleStateEvent) evt; if (event.state() IdleState.READER_IDLE) { log.warn(WebSocket idle, close connection: {}, ctx.channel().remoteAddress()); ctx.close(); // 主動(dòng)關(guān)閉空閑連接 } } }前端 App 連接時(shí)WebSocket構(gòu)造函數(shù)傳入protocols: [heartbeat]并在onopen后每 15 秒發(fā)ping消息后端收到ping立即回pong并更新lastPingTimeREADER_IDLE超時(shí)設(shè)為 20 秒。4.4 現(xiàn)象多個(gè)用戶同時(shí)控制同一盞燈出現(xiàn)“你關(guān)燈他開燈燈瘋狂閃爍”原因指令未做冪等性控制。A 用戶發(fā)ONB 用戶發(fā)OFF兩條指令幾乎同時(shí)到達(dá)服務(wù)端順序執(zhí)行設(shè)備狀態(tài)在 ON/OFF 間震蕩。解決指令入庫時(shí)UNIQUE KEY (device_id, action, params_hash)params_hash MD5(json(params))CommandService.sendCommand()先查庫是否存在相同device_idactionparams_hash且statuspending/sent的指令存在則直接返回duplicate前端按鈕點(diǎn)擊后置灰 2 秒防止手抖連點(diǎn)。5. 降級(jí)與驗(yàn)證當(dāng)遠(yuǎn)程通道全斷如何讓系統(tǒng)“活著”并證明它真能用5.1 局域網(wǎng)直連降級(jí)用 ZeroConfmDNS自動(dòng)發(fā)現(xiàn)設(shè)備當(dāng) MQTT/HTTP 連接全部失敗healthCheck()返回 false系統(tǒng)自動(dòng)啟用局域網(wǎng)直連。核心是ServiceDiscovery// LocalNetworkDiscovery.java Component public class LocalNetworkDiscovery { private final JmDNS jmdns; private final MapString, InetAddress deviceCache new ConcurrentHashMap(); PostConstruct public void start() throws IOException { // 1. 創(chuàng)建 JmDNS 實(shí)例綁定本機(jī)所有網(wǎng)卡 jmdns JmDNS.create(); // 2. 監(jiān)聽 _smartlight._tcp.local. 服務(wù)設(shè)備需廣播此服務(wù) jmdns.addServiceListener(_smartlight._tcp.local., new ServiceListener() { Override public void serviceAdded(ServiceEvent event) { jmdns.requestServiceInfo(event.getType(), event.getName(), 1000); } Override public void serviceResolved(ServiceEvent event) { String deviceId event.getInfo().getPropertyString(id); InetAddress address event.getInfo().getHostAddress(); deviceCache.put(deviceId, address); log.info(Local device discovered: {} - {}, deviceId, address); } }); } public InetAddress getDeviceAddress(String deviceId) { return deviceCache.get(deviceId); } PreDestroy public void stop() throws IOException { jmdns.close(); } }設(shè)備端配合要求STM32 設(shè)備啟動(dòng)時(shí)用ESP-IDF的mdns組件廣播mdns_init(); mdns_hostname_set(light_bedroom_001); mdns_instance_name_set(Bedroom Light); mdns_service_add(NULL, _smartlight, _tcp, 8080, NULL, 0); mdns_service_txt_item_set(_smartlight, _tcp, id, light_bedroom_001);涂鴉設(shè)備無法廣播 mDNS需在設(shè)備管理后臺(tái)手動(dòng)錄入局域網(wǎng) IP走HttpDeviceAdapter的localFallbackUrl字段。5.2 三步驗(yàn)證法證明你的遠(yuǎn)程控制真可靠光跑通不夠必須量化驗(yàn)證。我堅(jiān)持用這三步驗(yàn)證項(xiàng)方法合格標(biāo)準(zhǔn)工具指令送達(dá)率向 100 臺(tái)設(shè)備并發(fā)發(fā)ON指令統(tǒng)計(jì)ACK回報(bào)數(shù)≥ 99.5%允許 0.5% 網(wǎng)絡(luò)抖動(dòng)jmeter 自定義監(jiān)聽器端到端延遲手機(jī) App 點(diǎn)擊“開燈”到設(shè)備 LED 亮起用高速攝像機(jī)120fps計(jì)時(shí)P95 ≤ 1.2 秒WiFi、≤ 3.5 秒4G高速相機(jī) ffmpeg幀分析腳本斷網(wǎng)恢復(fù)時(shí)間拔掉樹莓派網(wǎng)線 30 秒再插回測(cè)首次指令成功時(shí)間≤ 800ms從插網(wǎng)線到healthCheck()通過systemd日志 curl -w format.txt關(guān)鍵技巧jmeter測(cè)試時(shí)Thread Group設(shè)置Ramp-up period 0瞬時(shí)并發(fā)HTTP Header Manager加Authorization: Bearer xxx高速攝像機(jī)驗(yàn)證用ffmpeg提取 LED 亮起幀ffmpeg -i light_test.mp4 -vf selectgt(scene\,0.4),showinfo -f null - 21 | grep pts_time | head -1scene參數(shù) 0.4 表示畫面亮度突變閾值pts_time即時(shí)間戳斷網(wǎng)恢復(fù)測(cè)試healthCheck()不僅 ping 阿里云 MQTT還要telnet mqtt-cn-xxx.iot.aliyuncs.com 1883因?yàn)?DNS 可能緩存但端口不通才是真斷網(wǎng)。5.3 一個(gè)讓我少熬 20 個(gè)夜的調(diào)試習(xí)慣所有指令加 traceId 并透?jìng)鞯皆O(shè)備端最初我們只在服務(wù)端打日志設(shè)備端不回傳 traceId導(dǎo)致“指令發(fā)了沒”永遠(yuǎn)是個(gè)謎?,F(xiàn)在強(qiáng)制Command類增加traceId: String字段生成規(guī)則trc- System.nanoTime() - RandomStringUtils.randomAlphanumeric(4)所有適配器發(fā)送時(shí)將traceId注入?yún)f(xié)議MQTT 的userProperty、HTTP 的X-Trace-IDheader、TCP 幀的payload開頭 16 字節(jié)設(shè)備固件收到指令后執(zhí)行完畢立即回傳{traceId:trc-xxx,status:success,timestamp:123456789}服務(wù)端CommandService.handleDeviceReport()收到后更新command_status表的traceId字段并觸發(fā)notifyApp(traceId, success)。這樣當(dāng)用戶說“我點(diǎn)了開燈沒反應(yīng)”我只需查SELECT * FROM command_status WHERE traceId trc-xxx立刻知道如果記錄不存在 → 指令根本沒發(fā)出前端或網(wǎng)關(guān)問題如果status sent但無后續(xù) → 設(shè)備沒收到網(wǎng)絡(luò)或設(shè)備死機(jī)如果status ack→ 設(shè)備執(zhí)行了問題在燈硬件。這個(gè)習(xí)慣讓我把平均故障定位時(shí)間從 47 分鐘壓縮到 3.2 分鐘。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国人欧美精品一区二区| 吉田爱美AV在线| 婷婷午夜成人色中色| 色哟哟-国产专区| AV麻豆免费一区| 精品999一区二区| 亚洲激情久久| 亚欧高清| 人人爱人人乐人人操| 天天欧美欧美亚洲网| 久久精品黄色| 大香蕉狠狠爱| 国产极品999| 久久这里只精品免费福利| 国产熟女| 亚洲综合网电影91| 欧美激情专区| 亚洲国产精品无码AV久久久| 91人妻熟女| 91视频成人福利网站在线一区 | 丝袜美腿欧美| 99无码视频| www色色com| 91高潮| 99re综合伊人| 精品无码产区一区二| 99在线观看无大码| 污啪啪啪视频| 天天精品| 小视频国产| 美女91网| 伊色久人大在线| 上床不卡网站| 国产精品。| 日本午夜福利视频| 亚州Av天美传媒| 欧美大干日韩| 人人搡人人肉久久精品| 亚洲精品国产拍免费91在线| 国产热RE99久久6国产精品首| 国产高清1234区| 亚洲天天影视综合网| 色拍偷亚洲| 综合色久欲| 1级午夜影院费免区| 天天欲望网| 日本亚洲嫩草影院啪啪| 天天爱综合网| 国内毛片欧美香蕉精品| 人人妻人人澡人人爽人人精品浪潮| 少妇熟女视频一二三区| 99国内熟女露脸视频| 欧美亚洲日韩16色| 欧美色图自拍| 日韩性爱啪啪视频| 911粉嫩人妻| 国产99精品一区二区三区免费| 无码精品久久久久久亚洲| 亚洲熟妇一,二,三期| 亚洲第一视频 欧美风情 日韩| 美女AV一区二区| 久热精品色情| 亚洲日韩青青草色月| 熟女自慰久久久| 超碰97久久国| 色综91| AV乱伦国产| 日韩中文字幕人妻视频| 日韩人妻播放| 亚洲欧洲精品视频发布| 婷婷五月天社区| 色色色综合网| 久插不卡| 碰碰97| 国产精品内射婷婷一级二| 一二三四视频中文字幕在线看| 淫荡少妇免费| 老色69| 厕所偷拍在线| 亚洲av夫妻操穴网| 欧美精品三区| 草久在线| 韩日性爱av| 99综合视频| 人妻天天夜夜爽一区二区| 后入内射蜜桃臀| 久久国模av| 久久久免费高清中文视频| 精品免费成人久久| 三级色综合| 亚洲丝袜天堂| 国产大陆天天艹| 亚洲日韩国产欧美综合v| 久久香蕉国产传媒一区剧情天美| 亚洲图片在线| 91精品人妻偷情| 亚洲中文一区二区三区视频| 性色高清在线| 国产精品不卡一区二区三区av| 五月婷婷丁香| 亚洲自拍偷拍视频在线| 欧美人妻二区三区| 亚洲阿v天堂在线| 亚洲日韩国产欧美综合v| 91精品国久久久久久无码| 九草九九九| 久久久久久九| 久久只有精品一区二区三区| AAAA欧美日韩| 欧美A√综合网 | 久久久九九九九| 国产激情视频一区区三区| 中文字幕天堂在线| 亚洲国产综合久久天堂| 日夜伊人网| 啪啪91| 国产丰满熟夫69mpp| 中文字幕一区二区视频在线观看| 黄色大片一区二区密桃丝袜| 色综合 加勒比| 亚洲欧美在线观看无码| 超碰97最新人妻| 五十路六十路七十路熟婆| 极品尤物在线观看| 欧美影音在线| 亚洲av影音先锋| 超碰天天操你比| 青娱乐欧美激情一区二区 | 久久久免费高清中文视频| 日韩国产欧美伦理在线| 国外91| 吖在线不卡一区二区国产剧情| 97色97好| 亚欧性爱ab| 亚洲精品欧美专业| 天堂v无码免费视频| 亚洲综合有玛| 日本精品第一视频在'| 日本久久久精品电影| 久久99操天天日| 夜夜嗨视频| 丁香五月婷婷基地| 91中出| 日本三级小说中文字幕| 最新中文字幕在线亚洲| 91第一页| 国产精彩女在线观看视频| www久久99| 97亚洲在线| 嗯嗯啊啊用力视频免费| 日美免费黄片| 激情婷婷综合久久| 亚洲精品九九九九九九| 日本九九久久99播| 亚洲成人久久一区二区| 97在线观看| 久久久久ab| 婷婷色在线| 强奸乱伦AV一天堂网| 日韩欧美水蜜桃人妻| 激情色色| 五月婷婷大香蕉| 欧美v亚洲v综合v国产v妖精| 国内一级精品| 嗯嗯啊啊好大好爽| 日韩精品黄片免费观看| 97天天综合| 嫩草黄页| 99操| 偷拍色图| 国产精品久久久久久久久久久久久久久久久久 | 久久天堂网| 色老汉色| 91人妻人人妻| 午夜婷婷| 在免费jIzzjIzz在线视频| 久久九色| 精品国产乱码久久久久久免费| www.99热在线只有精品| 嗯嗯啊操我| 天天日天天干天天整| 亚洲影院365| 欧美中文字幕精品人妻| 日本高清视频在线观看黄已三辽| 亚洲性综合9| 国产精品亚洲一区二区三区四区| 一级岛国大片| 欧美三级偷拍| AV女优男人的天堂| 中国91AV| 91日韩网站| 国产天天噜一噜久久久| 午夜精品久久999热蜜桃介男人用| 成人日韩中文字幕| 国产日韩精品一区二区三区| 成人资源中文字幕在线观看天天| 国产福利视频精品视频| 日本孕妇一区二区视频操逼免费看| 乱人乱色一区二区三区免费| 人妻蜜桃臀| 国产97综合| 学生妹天天看| 乱操9999| 免费一级精品啪啪视频| 日韩少妇丰满亚洲| 青青草公开在线免费不卡视频| 九九热视频这里只有精品| 中亚av| 91美女中出| 男人夜色天堂ss| 91粉芽高清在线一区二区| 色色五月婷婷| 老鸭窝亚洲毛片| 九色 人妻 大香蕉| 加勒比久久综合网高清| 韩日色费| 欧美日韩性爱精品| 91爽啪| 这里只有精品久久| 色婷婷蜜臀av| 精人妻无码一区二区三区伊人直播| 国产成人主播| 嗯嗯啊啊啊啊轻点视频| 懂色影视久久| 91丝袜美女视频| 免费精品无码一级毛片牛牛影视| 日韩欧美午夜一区二区| 欧美极度丰满熟妇hd| 久久久九九网站| 五月天精品| 超91综合网| wwe 天天干.com| 日韩在线欧美精品一区二区| 国产青视频| 色小视频蜜乳| 强奸乱伦av电影| 人妻蜜桃臀| 伊人九九九| 日本成人在线不卡一区二区三区| 性欧美另类高清| 国产熟女免费观看久久| 久久ww| 嗯嗯嗯嗯啊啊啊好紧好大| 久久久久久亚洲精品中文字幕人妻| 亚射在线| 91女日逼| 熟女五十路一区二区三| 深爱五月天| 日韩婷婷| 青青草依人大香蕉| 天天操美美| 少妇高潮喷水无套久久久久久| 日韩天天综合| www.大香| 久久久婷婷| 青青草原av| 国产精品又黄又猛又粗| 99热这里是精品| 熟女天天干| 久久中文字幕在线观看| 国产亚洲色婷婷久久99精品91葵花宝典| 精品久久視頻在线| 99re6在线视频精品免费完整版安卓版| 天天综合欧美| 五月丁香六月婷| 国产精品高潮久久AV| 伊香蕉综合久久久久久久噜噜噜| 在线观看av区| 亚洲综合校园春色| 国产狂喷潮在线精品| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 91精品人妻啪啪间| 2018天天日天天日| 亚洲熟女av日韩熟女| 78久久久| 欧美性爱一区二区三区| 欧美黑人与女人91~| 精品一区二区三区18| 午夜福利视频在线一区| 久久亚码| 伊人久久亚洲色欲综合网站| 人人操人人插 - 百度 - 百度| 97操操| 久久青娱乐| 欧美十八禁在线看| 欧美伦乱爱| 成年人网站在线免费观看| 91人妻PORNY九色大屁股| 伊人精品国产| 中文字幕日韩人妻视频一区二区三区 | 青娱乐老司机视频| 五月天伊人| 欧美18老人禁| 天堂国产AV| 性久久久| 欧美日韩亚洲五月天婷婷| 欧美十八禁视频| 成人综合网 欧美| 欧美伊人久久综合网| 大肉棒导航| 日韩精品 视频一区二区| 9 1果冻精品视频| 午夜天堂精品久久久久91| 欧洲色综合| 丁香五月婷婷色| 国产精品另类| 国产丝袜美女诱惑| 麻豆国产视频精品观看| 九九九九一级| 丝袜AV一二三区| 农村女一级毛卡片| 午夜欧美J进J出白浆流出久久久| 国产特级毛片AAAAAA高潮流水| 激情综合网一盗摄| 夜夜爽33333| 女性喷水高潮在线观看| 欧美亚洲厕所精品偷拍91| 久久免费老司机精品| 亚洲成熟国产精品美女| 亚洲区限制级 99| 婷婷五月天伊人| 蜜臀在线视频| 中文字幕欧美日本乱码一线二线| 亚洲人成网www| 日韩极品无码B| 97欧美色资源| 亚洲色图超碰在线| 爽极品影院| 黄色工厂这里只有精品| 欧美亚洲国产自久久| 日韩在线一区高清在线| 91精品丝袜久久久久久| 九一综合精品视品av| 久草网站免费在线观看| 激情小说图片亚洲首页| 91综合无码| 狠插 制服 自拍| 亚洲国产激情国产av| 韩国免费播放一级毛片| 国产91丝袜 在线播放| 精品亚洲俞拍视频一区| 少妇二级| www激情| 国产亚洲福利第一页丝袜| 欧美高清在线| 天天看高清麻豆| 97色伦欧美| 新版天堂中文资源8在线| 国产又粗又大硬免费色网视频| 欧美大干日韩| 中文字幕78| 欧美制服网站美腿丝袜| 99操| 色综合久| 全球成人中文在线| 国产成人精品日本视频| 久久成人国产| 黄色网址在线免费观看| 飘花国产午夜精品不卡| 伊人黄色片| 懂色Av| 黄页| 久久精品国产亚洲AV清纯| 天天夜夜rb| 免费的黄片有限公司| 最新制服中文第一页| 98福利在线视频| 91国产大片| 宅男91视频在线播放| 性爱久久| 天天干天天拍| 水澄无码AV| 婷婷日韩一区二区三区中文字幕在线| 天天爽天天| 色婷婷电影网| 狠狠狠一区二区三区| 男人夜色天堂ss| 日韩一级二级| 国产欧美美女免费观看视频| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 人人操,操人人| 精品无码久久久久久国产浪潮| 亚洲巨爆乳一区二区三区四季网| 久久精品一区二区一8| 国产精品美女| 夜夜操中文字幕| 60秒免费小视频| 欧美 亚洲 91| WWW美腿丝袜香蕉中文| 校园春色欧美| 99999久久精| 69精品| 亚洲一级黄色毛片| 久久无码成人| 最近的最新的中文字幕视频| 国产精品久久久视频| 五月天加勒比啪| 日本道久久综合色色| 欧美日韩在线国产在线| 极品粉嫩少妇视频| 99色热国产视频精品| 国产亚洲女v在线观看| 99精品欧美一区二区三区桃色| av强奸乱轮| 亚洲最新中文字幕免费| 动漫爆乳3D奶水一区在线观看| 岛国片在线观看视频亚洲| 丁香五月天啪啪| 国产欧美一区二区| 色老牛| 性色高清..……| 天堂成人网| 精品久久久久久无码| 国产高清MV操逼视频| 操碰91| 亚州色图狠狠干| 国产超碰97| 亚洲无线观看久久| 国产一区二区欧美日本| 亚洲综合性感在线| 欧美97超碰| 欧美一级黄片视频在线| 久久草草欧美精品| daxiangjiao你懂的| 激情综合五| 蜜乳AV.COM| 亚洲最大无码中文字幕网站| 天操天操夜操夜月操月年年操| 欧美天天| 少妇xx精品| 亚洲欧洲视频小说在线观看| 日韩三级性| 欧洲黄色网| 五月婷久久| 亚洲精品国产av天美传媒| 日日躁夜夜躁狠狠躁超爽| 中文字幕一区二区日韩网| 丁香六月天| 日本免费一区二区不卡| 看免费的黄片| 久jiu久神马影院| 后入式福利| 日韩在线一区高清在线| 精品国产嫩穴视频| 蜜臀久久久99久久久久 | 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 亚洲 欧美日韩 另类| 国产极品久久久| 婷婷综合伊人一区| 99综合网| 国产路线专区| 人人操av| 午夜视频久久久| 偷拍精品一区二区三区| 婷婷色综合| 久艹免费| 久99久视频| 日韩在线观看AV| 中文字幕亚韩| 97精品视频在线| 日本高清有码网址视频| 亚洲欧美爆| 蜜桃传媒视频第一区入口在线看| 能直接看AV的网站| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 午夜男女爽爽大片免费观看| 偷窥自拍亚洲色图| 久久久久久久强迫| 99久久无色码| 99婷婷一区二区| 好爽,再快点啊哈嗯嗯嗯嗯| 96一区二区| 亚洲97久久精品亚洲| #NAME?| 91蜜臀人妻中文字幕在线| 懂色AV中文| 欧美东京热青青草| 美女操逼福利视频| 中文字幕黄色片| 久久亚洲精品成人av| 人人操人人射人人干| 黑人操一区二区| 国产诱惑| 久久久98网站免费视频| 欧美日韩国产一区二区小黄片大全| www老逼91| 无码精品久久| 亚洲双插| 欧美日韩理论一区| 中文字幕一区二区三区高清| 日日玩天天干| 亚洲欧洲小说图片视频 | 日韩成人精品中文字幕| 爱爱啊啊啊| 18一区二区三区| 欧美呦呦性爱| 亚洲污一污二| 日韩精品.久久精品.AV女优.天美传媒| 久久激情亚洲精品无码?V| 综合网天天| 久久超碰亚洲人| 这里只有精品视频在线观看麻豆| 亚洲一区二区三区春色| 久久综合av| 九九在线精品| 国产一区二区三三视频| 欧美日韩制服| 丝袜视频一区二区在线播放国产中文| 欧美做爰无码A片视频| 色婷婷国产精品一区在线观看| 欧美综合制服在线| 性爱久久| 欧美国产伊人久久久久| 精品人妻中文字幕高清| 精品无人区麻豆乱码1区2区图片 | 久草男人天堂| 成年女人一区| 免费av大片| 国产偷拍网站| AV女优男人的天堂| 无码人妻系列少妇| 丝袜综合| 无码欧美有限公司| 99色视频| 亚洲欧美日韩夜夜| 无码精品久久久天天影视| 国产精品96久久久久久| 天天综合网亚洲综合网| 91久久18禁| 麻豆蜜桃视频在线观看| 极品色www影院| 影视综合无码少妇| 欧美性性性| 97超碰热线| 亚洲欧洲偷拍一区| 色婷五月天| 亚洲一区二区三区欧美日韩| 国产女人和拘做爰视频| 欧美αv.com| 美女天天干| 男人的天堂com| 色偷偷超碰亚洲| 日韩99神马视频片| 日韩天堂av电影在线观看| 五月丁香色综合| 日本精品一区二区中文字幕| 神马久久久久久久| 国产无码久久高清| 欧美性91| 天堂成人网| 97亚洲综合在线| 日韩中文9| 熟女精品一区二区在线观看| 先锋音影AV| 久热精品色情| 婷婷五月天无码| 97超级欧美| 黄呦呦在线| 大香蕉伊在线久草麻豆天堂故事| 精品国产一区二区三区久久久蜜臀| 欧美日日网| 禁止观看美女黄| 色噜噜人妻av 中文字幕| 婷婷日韩一区二区三区中文字幕在线| 熟女人妻av在线资源,黄色的资源| 久热99| 精品久久久久久亚洲| 婷婷五月天小说| 91蜜臀在线久久久久| 一区二区三区 丝袜 高跟 美腿| 精品久久久九九九孕妇| 久艹伊人精品综合在线| 欧美日动态视频| 中文欧丝袜诱惑| 极品人妻少妇综合| 17c嫩草51久久91嫩草| 亚洲成人激情小说视频| 国产女人和拘做爰视频 | 亚洲av影音先锋| 亚欧无码在线| 伊人91| 97超碰天天| 午夜无码熟妇丰满人妻| 91综合无码| 人人看黄色视频| 日本三级网页| 红杏大香蕉| 91色黑人少妇| 欧美色图99| 精品无码欧美三级| 精品国产乱码久久久久久口爆网站| 夜夜草网站| 日韩一级二级在线| 9久9久9久9久视频网站| 久久精品一区二区一8| 国产精品一区午夜福利| 能看的AV| 91 丝袜在线观看| 91久久久久久久久18| 亚洲精品一区二区精品| 亚洲综合在线视频| 青娱乐手机日韩在线视频| 97这里有精品| 在线观看亚洲专区| 热天堂一区二区| 99热线麻豆| 超碰97人妻免费在线| 人人人摸人人| 2019久久久久久久久福利| 一区在线观看中文字幕| 99在线视频播放| 亚洲欧美情色| 婷婷在线精品| 91N综合网在线| 亚洲欧美色图小说| 亚欧精品久久久久久久久久久| 传媒免费一区二区三区| 精品欧美老熟女一二区| 欧美在线干| 性交一区二区在线播放| 五月婷婷激情网| 国产欧美后入| 欧美日韩另类在线播放| 欧美激情总合网| 亚洲色欧| 日韩性爱电影一区| 国产一区二区三区久久精品太古里| 97资源久久| 色婷久久| 97网站在线观看| 青青久久手机线视频| 人人综合| 秋霞操逼片| 伊人影院在线理论播放 | 天天干,夜夜爽| 久久精品无码熟妇一区二区三区视频导航| 亚洲国产尤物yw在线观看| 大香蕉天天看妹子| 婷婷干黄色| 久久久久9久久久久| 超碰色图| 亚洲情色第一页| 久热最新在线杭州| 亚洲色图超碰在线| 久久久久久97| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 操逼视频亚洲| 蜜臀久久精品久久久久视频| 大香蕉综合久久| 五月婷久久| 97操在线| 国产精品视频白浆免费| 欧美九一精品久久久熟妇| 欧美十八禁网站| 蜜臀99久久精品| 欧美日韩第一页| 青草一区二区| 青青青国产| 婷婷av在线中文字幕| 撸撸成人在线视频| 少妇xx精品| 国产suv精品一区二六| 色丁香久久| 97免费视频在线观看| 亚洲国产剧情少妇激情| 99久热| 天天色播亚洲综合网站| 欧美婷婷久久| 家庭乱伦性爱av| 亚洲加勒比色图| 天天干一干| A级片日韩欧美国产欧美视频精选观看| 天天摸夜夜摸| 国产69精品久久久久99尤物| 国产一区二区在线看| 欧美极品女人的天堂| 久久丁香久草综合网| 日韩色女精品| 丝袜美腿诱惑亚洲欧美视频在线观看| 搡老熟女免费视频| 九9热伊人| 亚洲夜色在线| 看一级特黄a大一片| 九九九久久久W精品| 宅男午夜在线视频| 国产激情av女片自拍| 丰满熟女一区二区三区在线播放| 久久久九九九九| 色色色综合网| 日韩免费大片一级播放| 日韩十八禁| 国产亚洲日本| 偷窥自拍亚洲色图| 五月婷婷丁香中文字幕| 人人操人人93| 一卡二卡三卡| 欧美乱妇狂野欧美在线视频| 五月婷婷六月丁香| 综合欧美激情网| 国产内射爽爽大片| 91天天爽| 2026国产精品视频| 九九九网页| 爱我干综合| 激情抓乳插进去啪啪啪日韩| 五十路三区在线| 丝袜高跟澳门91视频| 国产老熟女| 五月天婷婷影院| 亚洲国产高清福利视频| 极品综合| 中日韩免费看男女操逼大全| 欧美伊人电影| 欧美在线干| 亚洲一二三| 91丝袜美腿网站| 小少妇| www色色com| 天天日天天干天天整| 欧美 日韩 亚洲 春色| 草草电影院| 欧美 亚洲 偷拍自拍| 国产又黄又爽又刺激久久久久久| 超碰97 线线 在现| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 无码人妻一区二区一牛影视| 亚洲精品亚洲人成人网| 国产剧情AV不卡在线观看| 自拍偷拍亚洲熟女妇人精品| a片在线播放| 男女一进一出视频久久| 久草在线| 在线a亚洲视频播放在线| 青草成人免费视频一COm| 91n处女在线观看| 久久久女人| 美女黄页网站| 91丰满| 色图四区| 亚洲精品电影| 97人人夜夜精品视频| 天天综合网1| 97国产天堂岛| 久久人妇| 人妻免费观看| 91精品女厕偷拍视频| 蜜臀va69| 久草加勒比一区在线| 啊啊啊在线看| 大香蕉2017| 国产白丝网站| 男人的天堂久久久| 婷婷色综合欧美日韩| 成人线上超碰| 精品国产91内射久久| 欧美大香蕉同搞| 亚洲一区二区三区四区视频| 去干网最新版| 91色综| 嗯……啊…嗯嗯…啊…好舒服| 一区二区精品更新提醒| 欧美少妇色综合| 色香综合天天影视综合| 色悠悠伊人网五月天| 欧美色图20p| 亚洲高清无毛一区二区| 国产网红精品| 婷婷视频网| 91国产丝袜足交精品视频| 午夜啊啊啊| 午夜久久久| 精品一区二区三区麻豆| 免费看片黄| 日本性爱少妇| 91久久国产综合久久| 东北女人的毛片| 大干人妻| 久久草草亚洲蜜桃臀| 男人高清无码一区二区| 国产精品色| 操一区| 国产精品乱码久久久| 国产成人自拍视频视频| 97色婷| 亚洲淫色网中文| 四虎精品永久在线观看| 思思视频免费看网站| 怡红院一区二区熟女人妻| 91久热这里只有精品| 啊啊啊久久久视频| 超碰欧美| 成人午夜无码视频| 330dv亚洲成年视频网| 久久久偷拍| 影音先锋乱| 少妇天堂网络| 久久东京热久久| 老司机射| 亚洲视频一二区| 色香AV| 五月天丁香网| 激情啪啪视频| 欧美性爱18观看| 熟女人妻av在线资源,黄色的资源| 91色色综合| 精品日韩人妻精品一二三区| 日韩人妻资源在线看| 国产AV天美传媒一区二区三区 | 天天做天天爱天天高潮| 日本免费一区二区不卡| 久久久99免费| 九九九久千久久激情蜜桃在线看 | 亚洲高清无码在线桃色| 黑人中出21连凳花野真衣| 日本不卡在线二区三区| 精品人人插人人操| 超碰这里有精品| 99国产在线 精品 视频| 91欧美成人色站| 欧美牲| 日韩欧美经典在线观看| 美骚妇av高清在线| 婷婷亚洲综合| 少妇第一页| 国产人妖视频一区在线观看| 九九九九日本| 国产亚洲欧美每日在线| 国产精品乱码久久久久久久久久久久| 亚洲精品99999| 亚洲色图大香| 97 色综合| 内射白嫩美女| 人人操人人摸人人骑| 色妹子A V| 蜜臀中文字幕| 800zy一区二区| 亚洲精品自拍| 插老姨肥穴| 8x福利精品第一福利视频导航| 激情文学 国产一二三aV| 色综合国产在线观看| 丝袜喷水在线| 日本欧美韩国国产在线| 亚熟hd视频在线| 精品国产人成在线| nuu12国产麻豆精品| 激情看片网站| 色欧洲| 人妻出轨一区二区三区| 婷婷在线视频在线观看| 国产精品一区二区后入| 人妻系列无码专区中文有码| 睡产熟女乱伦| 九九热超碰97亚洲最新香蕉 | 韩日精品四区| 国产乱子伦一区二区三区免看| 在线观看高清AV| 福利大香蕉| 可以免费观看的av| 欧美日韩国产成人高清| 欧美97日韩精品| 免费一级欧美片片线观看| 先锋女优在线观看视频| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 日婷婷| 男人天堂久久精品不卡| 日本狠狠干| 男女猛烈无遮掩视频免费软件| 久久熟女久| 欧美亚洲日韩人妻在线观看| 夜夜草天天| 97爱啪| 婷婷综合在线观看| 久久久久国产精品喷潮免费观看臀| 欧美91网| 校园春色综合色| 欧洲熟妇xxXx欧美老妇裸体| 日韩精品在线视频,日韩精品……| 国产天美传媒精品| 婷婷五月天AV| 一级@啪啪视频| 欧美操逼录像国产黄色国产| 操香逼| 亚洲操操操| 亚洲成人日韩小说| 97爱爱爱| 九九久久国产精品怡红院| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 黑人嘿嘿嘿超爽免费视频| 亚洲欧洲自拍| 亚洲天堂电影网| 夜夜嗨AV蜜臀av| 丁香婷婷久久 | 久久久禁| 欧美AB在线观看| 岛国片在线观看视频亚洲| 日韩熟女无码| 久热最新在线杭州| 人妻大香蕉| 久久久∴| 精品人妻一区二区免费蜜桃| 色色色网站| 成人日本视频人妻在线| 国产极品精品美女视频| 国产一国产一级毛片古装| 综合亚洲网| 97精品在线| 精品乱码久久久久| 亚洲五区熟女| 在线观看AV不卡| 97自拍视频在线| 一起草精品人妻| 亚洲欧洲精品视频发布| 黄色片,com| av在线播放国产一区| 欧美一区二区男人天堂| 欧美九九九九九| 一本大道青青| av橘色网站| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 一二区在线观看视频| 加勒比五月天| 亚洲一区二区 麻豆传媒| 日本中文字幕高跟| 免費人妻夜夜爽天天爽爽一区| 人妻熟女一区在| 9999久久久久| 婷婷五月天网| 无码又爽又硬又激情免费视频| 国内毛片无码一级毛片| 强免费黄色网址| 三级片网站在线播放| 国产激情片在线观看| 久久香蕉综合一本到3atv| 亚洲一欧洲中文字幕在线| 色色福利| 国产亚洲禁久一区二区| 日本道久久综合色色| 性爱av网站| 大香蕉五月天| 看日韩美女二区三区免费操逼视频| 99re在线观看| 美女超碰978| 夜夜狼人妻| 超碰这里只有精品| 国产人妻精品一区二区三区秋霞 | 久热这里只有精品9| 欧美精品99久久久| 国产肏逼网站| 青青草一区二区高清无码视频| 好吊色综合| 日韩精品一二三四| 欧美成97爱| 亚洲综合草草| 青草精品视频-日本久久久久网站| 日本影视久久免费| 国产精品96| 亚洲视频精选| 亚洲精品不卡一二三区| 亚洲丝袜色| 亚码激情| 久婷婷一区| 美性中文综合网| 91人妻做a观看视频| 91色黑人少妇| 操婢日韩| 亚春色色| 性感女人网页在线观看视频| 97九色| AV九九| 1区2区3区中文字幕日韩| 粉嫩小泬久久久一区二区| 日韩中文9| 国产成久久综合片| 天天综合站| www.AV有限公司一区| 91激情国产| 91操熟女| 综合操逼| 怡红院视频在线| 精品国产乱码久久久兰草影视| 欧美综合亚洲| 小说区 图片区色 综合区| 亚洲av综合色| 欧美性天天影视| 亚洲熟久久| 婷婷久月| 乱伦av国产| 青青青操| 综合自拍| 欧美激情另类一区二区| 玖玖综合.com| 欧美一区二区三区成人性生活| 亚洲开心网| 人人射人人操人人摸| 后入内射蜜桃臀| 青草伊人网| av在线不卡一区二区三区| 密桃99999| 人妻超碰青青草98| 人人弄人人摸| 色播五月丁香| 天天日熟妇| 国产亚洲日韩欧| 亚洲老熟妇xxx| 91少妇通奸网站| 亚洲AV无码乱码| 超碰79人人乐| 亚春色色| 秋霞影音一区二区三区| 青青草精品| 亚洲在线| 婷婷五月天小说| 亚洲影视第一页| 国产中文精品一区二区在线观看| 高清不卡国产| 91日韩国产欧美亚洲另类精盘州至城都| 日本女优在线视频福利| 丁香五月天久久精品视频一区二区三区| 色五月av| 亚洲1区| 日本高清一本二本免费不卡| 精品欧美А∨无码黑人大荫蒂| 超碰 97国产熟女| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 日本在线激情一区二区三区| 国产亚洲日本| 国产精品免费日韩| 国产亚洲精品美女| 欧美日韩黄片精品在线| 少妇六月天| 欧美成熟性爱精品| 久久久久久久久久久久久久久乱码| 屁股久久久久久| 人妻激情另类| 久久久久久9| 日韩乱码Av| 欧美极品| 欧美成人精品一区二区三区| 91性色| 超碰97资源中文字幕| 91AV入口| 性性久久| 久久亚洲AV无码专区国产精品| 91欧美性| 欧美日韩性爱操大逼| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 中文色综合| 精品性爱久久视频| 黑人操一区二区| 国产精品高朝久久久久久久| 亚洲第一成人影院色播| 亚洲第一视频 欧美风情 日韩| 97香蕉碰碰人妻国产欧美| 99少妇| 少妇99| 五月激情视频| 天天综合91| 狠狠色一区二区中文字幕| 久干9操| 欧美欧美少妇| 99自拍B亚洲| 色就色综合| 爱丝福利| 精品视频一二三中文| 久久国产精品m码| 美国美女AV在线| 久久免费99精品久久久久久| 福利天堂| 翔田千里av一区二区三区| 日韩97P| 免费人人搞97| 国产精品自拍欧美在线| 大鸡巴久久| 图色综合网| 日韩人妻中文视频| 91性情| 蜜臀久久久| 一区二区娱乐网站| 思思久热在线精品66| 五毛骚逼极品美女怕怕| 中文字幕在线观看丝袜| 牛牛操视频逼| 蜜区区视频79| 久久一二三四不卡| 久久丁香五月天| 国产女同视频在线播放| 少妇的嫩逼图片| 美欧老女人97| 五月天激情婷婷| 中文字幕一区二区三区高清| 97人人爱人人乐| 97视频900| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 亚洲国产精品乱码在线观看| 思思热免费在线视频| 欧美双插| 无码九九| 啊啊啊啊二区好大| 五月天激情婷婷| 国产综合网站在线播放 | 成人精品在线| 中日亚韩免费视频| 精品视频一区二区| 91日日夜夜| 激情综合av| 亚洲情色五月天 | 亚洲熟妇自偷自拍另欧美| 女人 A一级| 综合影院永久入口国产| 欧美激情内射| 高清不卡 中文 人妻| 爱干爱射网啊啊啊| 日韩AV片| 丁香婷婷久久 | 欧美色图私拍91| 欧美日韩高潮喷水91| 亚洲啪啪性视频| av无码精品久久久久| 肏逼福利网站| 国产精品操| 不卡视频一区蜜桃视频 | 日韩欧美国产高清视频| 国产一区二区三区视频在线看| 国产精品美女视频诱惑| 78精品| 91天美免费| 综合大香蕉美。| 风骚少妇视频中文字幕| 新97国产超碰| 久久香蕉超碰97国产精品| 久艹伊人精品综合在线| 偷拍欧美激情| 精品人妻一区二区三区-国产| 日韩人妻精品久久久久| 99亚洲天堂| 能看的AV| 吻戏激情性巴克| 夜夜一区二区| 欧美少妇大量自拍视频在线观看| 欧美天天插| 亚洲天堂色图| av操操不卡| 国产中文福利| 欧美国产有色电影| 69久久久久久久久久久久久| 欧美91在线+|+欧美| 国产av热热色| 极品色电影院| 另类老少妇| 极品少妇久久久| 亚洲男人天堂AV| 欧美亚洲情色| 日韩无码视频黄色| 亚洲精品成人动漫在线| 中国国产精品一区视频| 成人午夜小视频手机在线看| 日韩AV熟女乱伦| 婷婷色色五月天| 天天操天天射青青草|