精品欧美一区二区三区在线观看 _久久久久国色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亚洲国产成人精品性色| 精品在线免费观看视频| 色综合综合网| 欧美一级一级性生活免费录像| av动漫在线播放| 日本天堂影院在线视频| 麻豆精品一区二区三区| 色综合久久久888| 99久久人妻无码精品系列| 99re8精品视频在线观看| 亚洲va欧美va人人爽午夜| 亚洲高清视频一区| 亚洲第一天堂在线观看| 日本美女一区二区三区视频| 色综合男人天堂| 久久久视频6r| 国产精品调教| 欧美喷潮久久久xxxxx| 国产精品69久久久| 日本精品一区二区三区在线播放| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产免费黄视频| 国产在线1区| 国产亚洲一本大道中文在线| 97人人香蕉| 中文字幕乱码中文字幕| 亚洲一区二区三区四区五区午夜| 免费不卡欧美自拍视频| 91在线无精精品白丝| 欧美理伦片在线播放| 91精品欧美福利在线观看| www日韩视频| 黄色在线观看www| 亚洲一级二级三级| 免费看污污视频| 自拍视频在线网| 91色九色蝌蚪| 精品久久久久久一区二区里番| 国产乱淫a∨片免费视频| 蜜臀av一区二区在线观看| 91高清视频免费| 国产极品美女高潮无套嗷嗷叫酒店| 欧美激情成人| 在线看日韩av| 国产精品美女高潮无套| 色综合综合色| 国产亚洲一区精品| 久久精品国产亚洲AV熟女| 日韩av中文字幕一区| 精品国产伦一区二区三区观看方式| 8x8x成人免费视频| 亚洲高清国产拍精品26u| 欧美无砖专区一中文字| 四季av一区二区| 成人看片网页| 欧美日韩美女一区二区| 国产精品自拍视频在线| 亚洲伦理一区二区| 91精品国产综合久久久久久久久久| 天天色综合天天色| 欧美成人毛片| 欧美二区在线观看| 国产人妻精品久久久久野外| 麻豆久久一区| 精品久久久久香蕉网| 久久免费精品国产| 欧美偷窥清纯综合图区| 亚洲免费一级电影| 成人免费视频入口| 日韩一区三区| 欧美猛少妇色xxxxx| 久久久一区二区三区四区| 在线一区免费观看| 庆余年2免费日韩剧观看大牛| 无码人妻精品一区二区三区不卡 | 青青草精品视频在线观看| 国产精品亚洲d| 欧美日韩在线播放三区四区| 亚洲日本黄色片| www.成人网| 亚洲人成网在线播放| 青青青视频在线播放| 午夜国产一区| 国产91|九色| 在线观看中文字幕码| 国产精品18久久久久久久网站| 国产一区不卡在线观看| 久久免费看视频| 亚洲视频一区在线观看| 给我免费播放片在线观看| 亚洲成人激情社区| 欧美一区二区黄色| 欧美丰满少妇人妻精品| 色爱综合网欧美| 韩剧1988免费观看全集| 免费看av在线| 不卡免费追剧大全电视剧网站| 欧美激情第一页在线观看| 在线免费黄色| 欧美日韩另类视频| 亚洲欧美天堂在线| 国产免费播放一区二区| 欧美激情精品久久久久久大尺度| 99久久久无码国产精品免费蜜柚| 久久99精品久久久久久| 欧美另类视频在线| 2024最新电影免费在线观看| 色美美综合视频| 欧美老女人bb| 久久中文字幕av| 91成人性视频| 亚洲AV无码国产精品午夜字幕| 国产三级一区二区三区| www.国产在线视频| 成人综合日日夜夜| 国产亚洲欧洲在线| 国产 日韩 欧美 在线| 国精品**一区二区三区在线蜜桃| 欧美亚洲精品日韩| 暧暧视频在线免费观看| 欧美一区二区福利视频| 人妻一区二区视频| 国产精品一区亚洲| 国产91精品一区二区绿帽| 男人和女人做事情在线视频网站免费观看| 精品久久久久久国产91| 娇妻高潮浓精白浆xxⅹ| 最新精品国产| 成人淫片在线看| h网站视频在线观看| 一本色道久久综合亚洲91| 色哟哟网站在线观看| 天天超碰亚洲| 国产色综合天天综合网| 九色网友自拍视频手机在线| 天天色综合成人网| 亚洲免费观看在线| 欧美激情aⅴ一区二区三区| 国产精品丝袜白浆摸在线| 国模吧精品人体gogo| 丁香五六月婷婷久久激情| 黄色免费视频网站| 亚洲一级二级| 国产精品免费看一区二区三区| av毛片在线看| 日韩欧美国产一区在线观看| 国产精品老熟女一区二区| 国产一区二区h| 亚洲小视频在线播放| 警花av一区二区三区| 久久久精品视频成人| 国产黄色片免费观看| 亚洲激情成人在线| 日本美女视频网站| 91久久黄色| 久久国产精品免费一区| 小视频免费在线观看| 精品亚洲va在线va天堂资源站| 91美女免费看| 国产日本欧美一区二区| 999精品视频在线| 日韩欧美精品综合| 成人欧美在线观看| 天堂8中文在线| 亚洲精品suv精品一区二区| 永久免费看片在线播放| 久久久夜色精品亚洲| 超碰av在线免费观看| 日韩在线观看| 亚洲xxxx做受欧美| 96av在线| 在线看片第一页欧美| 国产精品怡红院| 亚洲成a人v欧美综合天堂下载| 黄色性生活一级片| 日本成人在线视频网站| 中文字幕日韩精品一区二区| 91九色鹿精品国产综合久久香蕉| 国内精品小视频在线观看| 欧美伦理影视网| 欧美精品九九99久久| 久一区二区三区| 国产调教视频一区| 91丝袜超薄交口足| 国产精品三上| 小说区视频区图片区| 韩国女主播一区二区三区| 国产精品v片在线观看不卡| 黄色网址在线免费播放| 亚洲国产高潮在线观看| 中文字幕一区二区三区波野结| 亚洲精品大片www| 熟女俱乐部一区二区| 国产一区二区三区日韩| 久久国产成人精品国产成人亚洲| 日韩影院二区| 蜜桃999成人看片在线观看| 日本免费一区二区三区等视频| 欧美放荡办公室videos4k| 国产午夜在线观看| 欧美刺激午夜性久久久久久久| 日韩三级一区二区| 亚洲一区二区av在线| 成年人视频软件| 99国产欧美另类久久久精品| 亚洲一区二区偷拍| 日韩电影在线观看网站| 国产一二三在线视频| 99久久久久| 欧美国产综合视频| 极品国产人妖chinesets亚洲人妖 激情亚洲另类图片区小说区 | 久久99欧美| 麻豆精品久久| 国产日韩欧美综合| 无人区在线高清完整免费版 一区二| 久久综合色影院| 3d成人动漫在线| 亚洲欧美国产精品久久久久久久| 亚洲免费视频网| 69精品人人人人| 伊人亚洲综合网| 色94色欧美sute亚洲线路一久 | 亚洲伊人久久综合| 日本欧美不卡| 国产成人久久久| 人人草在线视频| 国外成人在线直播| 欧洲黄色一区| 久久6精品影院| 国产黄a三级三级三级av在线看| 亚洲网址你懂得| 色综合888| 亚洲美女精品成人在线视频| 蜜臀久久久久久999| 日韩欧美视频在线| av网站免费大全| 91精品婷婷国产综合久久性色| 一区二区不卡视频在线观看| 欧美色综合影院| 这里只有久久精品视频| 91国偷自产一区二区三区观看| aaa人片在线| 亚洲第一福利一区| 四虎成人精品永久免费av| 亚洲午夜免费电影| 国产一级中文字幕| 亚洲午夜三级在线| 日本亚洲色大成网站www久久| 亚洲第一福利一区| 亚洲男人的天堂在线视频| 色综合久久综合网| 亚洲av人无码激艳猛片服务器| 欧美日韩一卡二卡三卡| 91theporn国产在线观看| 欧美精品 日韩| 国产婷婷在线视频| 日韩精品在线网站| 手机av免费在线观看| 亚洲精品videossex少妇| 美丽的姑娘在线观看免费动漫| 亚洲欧洲日韩国产| 77777影视视频在线观看| 久久精品91久久香蕉加勒比| 国产精品剧情| 久久人人爽国产| 六月婷婷综合| 国产精品亚洲欧美导航| 蜜桃精品视频| 国产一区高清视频| 国产精品自拍区| 亚洲一区二区三区四区中文| 亚洲电影在线一区二区三区| 97超碰国产精品| 亚洲一区欧美二区| 欧美三级理论片| 国产麻豆精品95视频| 蜜臀aⅴ国产精品久久久国产老师| 成人午夜免费av| 亚洲码无人客一区二区三区| 国产精品护士白丝一区av| 久久久91视频| 欧美性xxxx在线播放| 一级做a爱片性色毛片| 精品久久久网站| 粉嫩av一区| 欧美成人免费小视频| 九色porny丨国产首页在线| 国产精品久久久久久久久久久久久| 精品中文字幕一区二区三区| 裸模一区二区三区免费| 国产精品久久久久久久免费观看| 亚洲 欧美 综合 另类 中字| 日本强好片久久久久久aaa| 午夜诱惑痒痒网| 久久婷婷成人综合色| 91 在线视频| 日韩欧美亚洲国产一区| 国产乱码精品一区二区| 亚洲欧美在线看| 欧美性爽视频| 国产精品一区二区三区在线播放 | 僵尸再翻生在线观看| 国产欧美日韩免费| 欧美亚洲大陆| www.国产二区| 美女爽到高潮91| 男生裸体视频网站| 亚洲精品美国一| 中文无码精品一区二区三区| 亚洲国产高清福利视频| caoporn免费在线| 国产成人精品日本亚洲| 成人免费直播在线| 中国 免费 av| 免费人成精品欧美精品 | 亚洲素人一区二区| 日本中文在线播放| 欧美videossexotv100| 日本www在线观看视频| 日本成人激情视频| 久久黄色影视| 久久男人资源站| 国产在线精品免费| jizzjizzjizz国产| 色综合久久久久网| 日本大臀精品| 孩xxxx性bbbb欧美| 成人激情自拍| 99热久久这里只有精品| 国产精品白丝jk白祙喷水网站| 婷婷丁香综合网| 欧美视频你懂的| 成年人在线观看视频| 日韩av123| 亚洲涩涩av| 人妻有码中文字幕| 91蜜桃网址入口| 欧美一二三区视频| 日韩av最新在线| 1区2区3区在线| 精品无人乱码一区二区三区的优势 | 亚洲理论在线a中文字幕| 岛国av免费在线观看| 国产精品一区二区欧美黑人喷潮水| 欧美日韩视频一区二区三区| 国产精品igao网网址不卡| 亚洲天堂免费看| 国产白浆在线观看| 蜜月aⅴ免费一区二区三区| 国产乱码精品一区二区三区亚洲人| 中国成人在线视频| 国产一区免费电影| 欧美精品入口蜜桃| 精品国产区一区| 老司机深夜福利在线观看| 久久66热这里只有精品| 性xx色xx综合久久久xx| 一级黄色性视频| 欧美日韩一区二区三区四区五区 | 中国av一区| 日韩免费高清在线| 国产精品美女一区二区三区| 国产精品久久久久久久久久久久久久久久 | 国产情人节一区| 国产精品毛片久久| 男人操女人下面视频| 五月天一区二区| 欧美精品少妇| 国产在线精品一区免费香蕉| 最新精品国产| 国产三级国产精品| 欧美视频一二三区| 18+视频在线观看| 黑人巨大精品欧美一区二区小视频| 亚洲一卡久久| av资源在线免费观看| 日韩三级精品电影久久久| 国产在线美女| 亚洲欧美日产图| 国产精品18久久久| 亚洲欧美综合自拍| 久久五月情影视| 牛牛影视一区二区三区免费看| 黄色片在线免费| 一区二区三区免费网站| 日本视频在线观看一区二区三区| 国产日韩在线一区| 99在线精品免费视频九九视| 一色道久久88加勒比一| 欧美成人一区二区三区在线观看 | 成人在线视频免费播放| 在线视频一区二区三区| 后进极品白嫩翘臀在线播放|