精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

高效推送!Spring Boot 3.4 實(shí)現(xiàn)網(wǎng)頁消息通知的五種最佳方案

開發(fā) 前端
不同方案適用于不同場景,開發(fā)者應(yīng)根據(jù)業(yè)務(wù)需求選擇合適的技術(shù)方案。在 Spring Boot 3.4 中,WebSocket 是最實(shí)時(shí)的方案,而 SSE 適用于單向推送,長輪詢和短輪詢則適用于兼容性要求較高的場景。

在現(xiàn)代應(yīng)用開發(fā)中,實(shí)時(shí)消息推送已成為提升用戶體驗(yàn)的重要手段。無論是在線聊天、系統(tǒng)通知、金融數(shù)據(jù)更新,還是團(tuán)隊(duì)協(xié)作,服務(wù)器主動(dòng)向?yàn)g覽器推送信息的能力至關(guān)重要。本文將詳細(xì)介紹 Spring Boot 3.4 中實(shí)現(xiàn)網(wǎng)頁消息推送的五種主流方案,幫助開發(fā)者選擇最適合的技術(shù)方案。

為什么需要消息推送?

傳統(tǒng)的 HTTP 請求是典型的客戶端-服務(wù)器交互模式,即客戶端發(fā)起請求,服務(wù)器返回響應(yīng)。然而,在許多業(yè)務(wù)場景下,我們希望服務(wù)器能夠主動(dòng)向客戶端推送消息,例如:

  • 在線聊天系統(tǒng)
  • 股票、基金等金融數(shù)據(jù)的實(shí)時(shí)更新
  • 業(yè)務(wù)系統(tǒng)的通知提醒
  • 在線文檔的協(xié)同編輯
  • ......

消息推送的五種方案

1. 短輪詢(Short Polling)

工作原理

客戶端定期向服務(wù)器發(fā)送請求,檢查是否有新消息。

Spring Boot 3.4 實(shí)現(xiàn)

package com.icoderoad.controller;


import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;


@RestController
@RequestMapping("/api/messages")
public class MessageController {


    private final Map<String, List<String>> userMessages = new ConcurrentHashMap<>();


    @GetMapping("/{userId}")
    public List<String> getMessages(@PathVariable String userId) {
        List<String> messages = userMessages.getOrDefault(userId, new ArrayList<>());
        List<String> result = new ArrayList<>(messages);
        messages.clear(); // 清空已讀消息
        return result;
    }


    @PostMapping("/{userId}")
    public void sendMessage(@PathVariable String userId, @RequestBody String message) {
        userMessages.computeIfAbsent(userId, k -> new ArrayList<>()).add(message);
    }
}

前端代碼

function startPolling(){
    setInterval(()=>{
        fetch('/api/messages/user123')
            .then(response=> response.json())
            .then(messages=>{
                if(messages.length>0){
                    messages.forEach(msg=>console.log(msg));
                }
            });
    },3000);// 每 3 秒查詢一次
}

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 實(shí)現(xiàn)簡單,適用于大部分瀏覽器
  • 兼容性極好,無需特殊服務(wù)器配置

缺點(diǎn)

  • 資源消耗大,存在大量無效請求
  • 實(shí)時(shí)性較差,受輪詢間隔影響
  • 服務(wù)器負(fù)載高,在用戶量大時(shí)不適用

2. 長輪詢(Long Polling)

工作原理

客戶端發(fā)起請求,若服務(wù)器無新消息,則保持連接打開,直到有消息或超時(shí)。

Spring Boot 3.4 實(shí)現(xiàn)

package com.icoderoad.controller;


import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;


@RestController
@RequestMapping("/api/long-polling")
public class LongPollingController {


    private final Map<String, DeferredResult<List<String>>> waitingRequests = new ConcurrentHashMap<>();
    private final Map<String, List<String>> pendingMessages = new ConcurrentHashMap<>();


    @GetMapping("/{userId}")
    public DeferredResult<List<String>> waitForMessages(@PathVariable String userId) {
        DeferredResult<List<String>> result = new DeferredResult<>(60000L, new ArrayList<>());


        List<String> messages = pendingMessages.get(userId);
        if (messages != null && !messages.isEmpty()) {
            List<String> messagesToSend = new ArrayList<>(messages);
            messages.clear();
            result.setResult(messagesToSend);
        } else {
            waitingRequests.put(userId, result);
            result.onCompletion(() -> waitingRequests.remove(userId));
            result.onTimeout(() -> waitingRequests.remove(userId));
        }
        return result;
    }
}

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 比短輪詢更高效,減少無效請求
  • 近實(shí)時(shí)響應(yīng)

缺點(diǎn)

  • 服務(wù)器資源占用較大
  • 不適用于大規(guī)模并發(fā)請求

3. Server-Sent Events(SSE)

工作原理

服務(wù)器通過單向流向客戶端推送數(shù)據(jù)。

Spring Boot 3.4 實(shí)現(xiàn)

package com.icoderoad.controller;


import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;


@RestController
@RequestMapping("/api/sse")
public class SSEController {
    private final Map<String, SseEmitter> emitters = new ConcurrentHashMap<>();


    @GetMapping("/subscribe/{userId}")
    public SseEmitter subscribe(@PathVariable String userId) {
        SseEmitter emitter = new SseEmitter(Long.MAX_VALUE);
        emitters.put(userId, emitter);
        return emitter;
    }


    @PostMapping("/publish/{userId}")
    public void publish(@PathVariable String userId, @RequestBody String message) throws IOException {
        SseEmitter emitter = emitters.get(userId);
        if (emitter != null) {
            emitter.send(SseEmitter.event().name("MESSAGE").data(message));
        }
    }
}

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 服務(wù)器主動(dòng)推送,減少客戶端請求
  • 自動(dòng)重連

缺點(diǎn)

  • 僅支持單向通信
  • 不支持 IE 瀏覽器

4. WebSocket

工作原理

WebSocket 允許服務(wù)器與客戶端建立雙向連接。

Spring Boot 3.4 實(shí)現(xiàn)

package com.icoderoad.config;


import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.*;


@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MessageWebSocketHandler(), "/ws/messages").setAllowedOrigins("*");
    }
}

優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 全雙工通信,實(shí)時(shí)性最強(qiáng)
  • 適用于高頻交互場景

缺點(diǎn)

  • 需要瀏覽器和服務(wù)器都支持 WebSocket
  • 可能需要負(fù)載均衡支持

5.基于 MQTT 的消息推送

工作原理

MQTT 是一種輕量級的消息傳輸協(xié)議,基于 發(fā)布/訂閱 機(jī)制,適用于低帶寬、高延遲或不穩(wěn)定的網(wǎng)絡(luò)環(huán)境。服務(wù)器(Broker)負(fù)責(zé)消息的轉(zhuǎn)發(fā),客戶端可以訂閱特定的主題(Topic),當(dāng)有新消息發(fā)布時(shí),Broker 會(huì)自動(dòng)推送給所有訂閱者。

Spring Boot 3.4 + MQTT 實(shí)現(xiàn)

  • 引入依賴

在 pom.xml 中添加 Eclipse Paho MQTT 客戶端:

<dependency>
    <groupId>org.eclipse.paho</groupId>
    <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
    <version>1.2.5</version>
</dependency>
  • 配置 MQTT 連接

在 application.yml 添加 MQTT 服務(wù)器的配置信息:

mqtt:
  broker: tcp://localhost:1883
  clientId: spring-boot-mqtt-client
  topic: /notifications
  username: admin
  password: secret
  • 編寫 MQTT 配置類
package com.icoderoad.config;


import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.stereotype.Component;


@Component
public class MqttConfig {
    private MqttClient client;


    public MqttConfig() throws MqttException {
        String brokerUrl = "tcp://localhost:1883";
        String clientId = "spring-boot-mqtt-client";
        client = new MqttClient(brokerUrl, clientId, new MemoryPersistence());


        MqttConnectOptions options = new MqttConnectOptions();
        options.setCleanSession(true);
        options.setUserName("admin");
        options.setPassword("secret".toCharArray());
        client.connect(options);
    }


    public void publishMessage(String topic, String message) throws MqttException {
        client.publish(topic, message.getBytes(), 2, false);
    }
}
  • 消息發(fā)布接口
package com.icoderoad.controller;


import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/api/mqtt")
public class MqttController {


    private final MqttConfig mqttConfig;


    public MqttController(MqttConfig mqttConfig) {
        this.mqttConfig = mqttConfig;
    }


    @PostMapping("/publish")
    public String publishMessage(@RequestParam String topic, @RequestBody String message) {
        try {
            mqttConfig.publishMessage(topic, message);
            return "消息已發(fā)送";
        } catch (MqttException e) {
            return "發(fā)送失敗:" + e.getMessage();
        }
    }
}
  • 客戶端訂閱 MQTT 消息

前端 JavaScript 代碼(使用 mqtt.js):

const mqtt =require('mqtt');
const client = mqtt.connect('ws://localhost:9001');

client.on('connect',()=>{
    console.log('已連接到 MQTT Broker');
    client.subscribe('/notifications',(err)=>{
        if(!err){
            console.log('成功訂閱 /notifications 主題');
        }
    });
});

client.on('message',(topic, message)=>{
    console.log(`收到消息: ${message.toString()}`);
});

MQTT 方案的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

  • 高效基于發(fā)布/訂閱模式,支持大規(guī)模并發(fā)推送,性能優(yōu)越。
  • 輕量協(xié)議數(shù)據(jù)包小,適用于 IoT 和移動(dòng)端推送。
  • 穩(wěn)定性強(qiáng)即使客戶端掉線,MQTT 也支持 QoS 質(zhì)量保證,可以保證消息傳遞。

缺點(diǎn)

  • 服務(wù)器需要額外部署 MQTT Broker(如 Mosquitto)
  • 不適用于短連接場景(如一次性通知)。

結(jié)論

不同方案適用于不同場景,開發(fā)者應(yīng)根據(jù)業(yè)務(wù)需求選擇合適的技術(shù)方案。在 Spring Boot 3.4 中,WebSocket 是最實(shí)時(shí)的方案,而 SSE 適用于單向推送,長輪詢和短輪詢則適用于兼容性要求較高的場景。

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2025-05-29 01:33:00

微服務(wù)架構(gòu)系統(tǒng)

2025-06-12 02:00:00

Spring簽到打卡

2023-09-19 15:33:50

Web實(shí)時(shí)消息推送

2025-06-30 01:45:00

2025-06-06 08:28:56

2022-07-30 10:08:06

MQTT?協(xié)議物聯(lián)網(wǎng)

2025-07-01 01:00:00

Spring消息系統(tǒng)Redis

2024-10-11 11:32:22

Spring6RSocket服務(wù)

2025-10-28 08:21:32

2024-08-29 09:01:39

2022-08-18 09:38:02

Spring跨域

2025-06-04 01:00:00

2025-06-17 07:37:53

2025-02-13 07:45:26

APISpringHTTP

2025-02-12 08:47:07

SpringAPI接口

2025-01-08 10:35:26

代碼開發(fā)者Spring

2025-05-13 07:13:25

2022-05-24 10:43:02

延時(shí)消息分布式MQ

2011-04-06 09:33:40

Push動(dòng)互聯(lián)網(wǎng)

2025-02-26 10:00:00

開發(fā)APIJava
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

久久动漫网址| 国产福利在线观看| 在线亚洲一区| 国产女主播在线一区二区| 国产91色在线播放| 亚洲欧美天堂在线| 91一区二区三区在线| 成人sese在线| 亚洲一区影音先锋| 免费一级欧美在线大片| 美女在线观看视频一区二区| 久久伊人精品视频| 热久久免费国产视频| 国产免费又粗又猛又爽| 成人免费看片| 99re视频精品| 国产视频999| 日韩三级视频在线播放| 日韩精品四区| 亚洲国产欧美久久| 国产精品久久久久久久av福利| heyzo一区| 国产精品福利一区二区三区| 日韩欧美一区二区在线视频| 国产乱码一区二区三区| 久久视频中文字幕| 自拍偷拍亚洲天堂| 91av手机在线| 18禁裸男晨勃露j毛免费观看 | www.成人在线| 国产精品视频一区国模私拍| 国产精品成人网站| 亚洲播播91| 一区二区三区不卡视频| 婷婷成人综合网| 亚洲最大av网| 亚洲一区在线观| 99精品免费视频| 大胆人体色综合| 五月天婷婷丁香网| 精品影片在线观看的网站| 精品久久久三级丝袜| 粉色视频免费看| 亚洲成人激情社区| 欧美日韩激情视频| av免费观看国产| 成人爽a毛片一区二区| 日本欧美韩国一区三区| 5566日本婷婷色中文字幕97| 久久精品免费在线| 欧美成人有码| 九九热99久久久国产盗摄| 亚洲国产欧美日韩在线| 国产亚洲人成a在线v网站| 色综合久久久久久久| 激情伊人五月天| a毛片不卡免费看片| 亚洲综合色网站| 少妇一晚三次一区二区三区| 怡红院在线播放| 亚洲色图在线播放| 美女视频黄 久久| 久久精品中文字幕一区| 亚洲不卡的av| 不卡视频在线| 日韩天堂在线视频| 三级黄色录像视频| 欧美伊人久久| 欧美黄色片免费观看| 免费一级片在线观看| 亚洲婷婷免费| 91豆花精品一区| 国语对白永久免费| 日韩经典一区二区| 久久久国产精品亚洲一区| 亚洲色图100p| 欧美理论在线| 久久久久这里只有精品| 日本一区二区三区免费视频| 性色av一区二区怡红| 国产精品黄色影片导航在线观看| 在线不卡免费视频| 国产一区二区三区四区五区美女| 97激碰免费视频| 婷婷激情五月网| 玖玖玖国产精品| 国产日韩欧美在线观看| jlzzjlzz亚洲女人18| 波多野结衣一区二区三区 | 久久久久九九视频| 天堂√在线观看一区二区| 91精品国产综合久久久久久豆腐| 中文字幕一区二| 日韩五码在线观看| 97人人做人人爽香蕉精品| 91精品国产欧美一区二区18 | 在线不卡日本| 激情网站在线| 一本一道综合狠狠老| 亚洲久久中文字幕| 国内精品免费| 中文字幕亚洲欧美在线| 动漫美女无遮挡免费| 欧美日韩破处| 在线不卡一区二区| 日本三级日本三级日本三级极| 婷婷亚洲精品| 精品久久久av| 日本三级小视频| 欧美1区3d| 欧美亚洲视频在线看网址| 一卡二卡在线观看| 99久久精品免费看国产免费软件| 色一情一乱一伦一区二区三区| 色yeye免费人成网站在线观看| 国产欧美日产一区| 国产a级黄色大片| 日本肉肉一区| 欧美网站一区二区| 日本少妇xxx| 青青一区二区三区| 亚洲 日韩 国产第一| 88av在线视频| 久久久一区二区三区捆绑**| 大地资源第二页在线观看高清版| 自拍视频在线看| 欧美成人a在线| 超碰人人干人人| 亚洲一区免费| 国产伦精品一区二区三区免费视频| 在线视频自拍| 色国产精品一区在线观看| 岛国av免费观看| 亚洲成av人电影| 久久色精品视频| 无码人妻丰满熟妇奶水区码| 粉嫩av一区二区三区在线播放| 亚洲欧洲精品一区二区| 暖暖日本在线观看| 日韩欧美主播在线| 亚洲自拍偷拍精品| 欧美激情视频一区二区三区免费| 国产精品免费久久久| 日本国产在线| 福利视频第一区| 男人的天堂影院| 欧美日韩网站| 99久热re在线精品996热视频 | 久久久999精品视频| 欧美 亚洲 另类 激情 另类| 老色鬼精品视频在线观看播放| 欧美精品久久| 亚洲欧洲美洲av| 日韩大陆毛片av| 亚洲日本视频在线观看| 91欧美激情一区二区三区成人| 极品粉嫩国产18尤物| 999国产精品一区| 久久久久久国产精品三级玉女聊斋 | 国产精品7m凸凹视频分类| 欧美成人免费全部| 国产欧美一级片| 亚洲美女少妇撒尿| 免费观看精品视频| 亚欧日韩另类中文欧美| 欧美有码在线观看视频| 免费a级毛片在线观看| 色综合久久天天综合网| 黄色三级生活片| 蜜乳av一区二区三区| 亚洲精品中字| 精品999日本久久久影院| 欧美日韩成人在线视频| 蜜桃在线一区二区| 日本一二三不卡| 亚洲欧美日韩一级| 亚洲色图88| 国产精品区一区| 超级碰碰久久| 最新91在线视频| 国产特黄一级片| 亚洲成人动漫av| 波多野结衣片子| 九九在线精品视频| 秋霞毛片久久久久久久久| www免费视频观看在线| 日韩一区二区三区免费看| 欧美一级高潮片| 久久亚洲综合色一区二区三区 | 我想看黄色大片| 国产中文字幕一区| 久久久久久久久久网| 精品国产一级毛片| 91高跟黑色丝袜呻吟在线观看| 丁香高清在线观看完整电影视频 | 国内三级在线观看| 亚洲高清不卡在线| 中文字幕在线播放视频| 日本一不卡视频| av日韩在线看| 国产一区二区三区电影在线观看 | 先锋影音一区二区| 久久久亚洲影院| av基地在线| 亚洲第一网站男人都懂| 中文字幕久久久久| 亚洲国产精品嫩草影院| 在线看片中文字幕| av电影在线观看不卡| 国产又黄又猛的视频| 国产亚洲一区在线| 福利在线小视频| 精品久久网站| 国产精品污www一区二区三区| 日韩成人亚洲| 国自在线精品视频| 国产人成网在线播放va免费| 亚洲女人初尝黑人巨大| 国产又大又黄视频| 综合久久久久综合| 国产精品麻豆入口| 国产毛片精品视频| 成年人免费大片| 精品国产一区二区三区| av免费观看久久| 欧美v亚洲v综合v国产v仙踪林| 97**国产露脸精品国产| 亚洲男同gay网站| 中文字幕日韩精品在线观看| 四虎电影院在线观看| 日韩欧美第一区| 国产又黄又大又粗的视频| 色狠狠一区二区三区香蕉| 天天插天天操天天干| 亚洲在线视频免费观看| frxxee中国xxx麻豆hd| 国产目拍亚洲精品99久久精品| 人妻丰满熟妇av无码久久洗澡| 国产成人在线电影| 在线免费观看av网| 美腿丝袜一区二区三区| 狠狠热免费视频| 亚洲一区二区三区四区五区午夜| 国产真实老熟女无套内射| 欧美激情第10页| 一级特黄妇女高潮| 国产精品91一区二区三区| 一区二区在线观| 久久日文中文字幕乱码| 性欧美大战久久久久久久免费观看 | 中文乱码人妻一区二区三区视频| 国产成人丝袜美腿| 337p日本欧洲亚洲大胆张筱雨| 韩国成人福利片在线播放| 亚洲a级黄色片| 久久99日本精品| 四季av一区二区三区| 狠狠久久亚洲欧美| 色偷偷中文字幕| 国产成人精品午夜视频免费| 成人三级做爰av| 粉嫩蜜臀av国产精品网站| 一级黄色电影片| youjizz久久| 人妻熟女aⅴ一区二区三区汇编| 9l国产精品久久久久麻豆| 中文文字幕文字幕高清| wwwwww.欧美系列| 亚洲区免费视频| 亚洲国产成人午夜在线一区 | 六月丁香综合网| 日韩精品在线播放| jizz在线观看中文| 久久精品久久久久久国产 免费| 超碰在线网址| 久久久噜噜噜久久中文字免| 久热在线观看视频| 国产精品成人观看视频国产奇米| 日本黄色一区| 成人网址在线观看| 国产精品成人自拍| 视频一区视频二区视频| 国产韩国精品一区二区三区| av在线免费观看国产| 亚洲自啪免费| 97超碰人人爽| 不卡的看片网站| 亚洲ⅴ国产v天堂a无码二区| 中文字幕一区二区5566日韩| 国产在线欧美在线| 91黄色在线观看| 国产福利第一页| 国产视频久久久久| 黄网站免费在线播放| 97国产一区二区精品久久呦| 8av国产精品爽爽ⅴa在线观看| 91久久久一线二线三线品牌| 蜜臀91精品国产高清在线观看| 91免费网站视频| 久久国产精品99国产| 善良的小姨在线| 久久久午夜精品理论片中文字幕| 欧美黑人性猛交xxx| 欧美性xxxxxxx| h片在线免费看| 国产一区二区三区四区福利| av毛片在线播放| 国产不卡视频在线| 天堂va在线高清一区| 欧美精品一区二区三区在线看午夜| 色狮一区二区三区四区视频| 大伊香蕉精品视频在线| 久久电影国产免费久久电影| 亚洲综合自拍网| 一区二区三区影院| 在线免费观看日韩视频| 日韩精品极品视频免费观看| 黄色免费在线观看| 国产精品av在线| 久久亚洲道色| 日本福利视频在线观看| 蜜臀国产一区二区三区在线播放| 亚洲图片综合网| 一区二区三区免费观看| 最近日韩免费视频| 亚洲精品少妇网址| 九色porny自拍视频在线观看| 亚洲在线第一页| 日韩精品欧美| 黄色aaa级片| 国产午夜一区二区三区| 精品美女久久久久| 精品国产sm最大网站| av免费在线免费| 国产情人节一区| 国产成人av| 日日摸日日碰夜夜爽av| 不卡一区中文字幕| 精品无码人妻一区二区三| 欧美一区二区网站| 国内精品不卡| 成人在线播放av| 国产精品不卡| 亚洲18在线看污www麻豆| 欧美国产一区视频在线观看| 日韩欧美在线观看免费| 亚洲乱码国产乱码精品精天堂| 九九精品调教| 国产传媒一区| 亚洲高清久久| 亚洲成年人av| 亚洲成人资源网| 婷婷开心激情网| 欧美亚洲国产另类| 精品一区在线| 日本a√在线观看| 欧美国产日韩亚洲一区| 最近国语视频在线观看免费播放| 在线视频中文亚洲| 91麻豆精品一二三区在线| 男人天堂成人网| 国产一区二区伦理| 久久中文字幕无码| 亚洲国产成人精品一区二区| 91白丝在线| 欧美高清性xxxxhd| 热久久久久久久| 久久国产美女视频| 欧美成人三级电影在线| 91九色美女在线视频| 欧美日韩三区四区| 蜜臀av性久久久久蜜臀av麻豆| 91ts人妖另类精品系列| 欧美一区二区不卡视频| bl视频在线免费观看| 欧美一区三区二区在线观看| 免费一级欧美片在线观看| 特级西西人体高清大胆| 日韩一区二区在线看| √8天堂资源地址中文在线| 老牛影视免费一区二区| 麻豆精品一区二区三区| 久久久久久久久久网站| 日韩高清av在线| 亚洲伊人伊成久久人综合网| 青青青在线观看视频| 久久日韩精品一区二区五区| 中文在线字幕免费观| 精品中文字幕在线| 国产精品日韩精品中文字幕| 嫩草视频免费在线观看| 午夜精品国产更新| 成全电影播放在线观看国语| 91九色偷拍| 久久都是精品| 青青草原免费观看| 亚洲小视频在线观看| 精品国产亚洲一区二区三区在线| www国产精品内射老熟女| 国产精品久久福利|