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

快速掌握Spring異步請求接口,輕松解決并發問題

開發 前端
異步請求接口是解決并發問題的有效方法之一,特別是在高并發、耗時操作、實時數據處理等場景中具有顯著優勢。通過異步請求,系統能夠避免阻塞線程,提高系統的響應性能和資源利用率。

環境:SpringBoot2.7.12


1. 概述

      在現代的互聯網應用中,隨著用戶數量的不斷增加和業務復雜性的提升,并發問題成為了開發中面臨的重大挑戰。傳統的同步請求接口往往無法滿足高并發場景的需要,不僅會阻塞調用線程,影響系統的響應性能,而且還可能導致線程資源的浪費。為了解決這些問題,異步請求接口逐漸成為了開發者的首選。

在SpringBoot框架中,異步請求接口的創建和使用非常方便,能夠讓你輕松解決并發問題,提高系統的可維護性和響應性能。本文將介紹如何快速掌握SpringBoot異步請求接口,以輕松解決并發問題。

2. 異步請求接口優勢

異步請求接口相比于傳統同步請求具有以下優勢:

  • 非阻塞性:異步請求不會阻塞調用線程,而是在請求處理過程中繼續執行其他任務或操作,從而提高了系統的并發性能和響應速度。
  • 可用資源:異步請求可以釋放占用的線程等資源,避免阻塞,等到結果產生再重新獲取線程處理。這樣能夠節省資源,提高系統的資源利用率。
  • 解耦:異步請求可以減少系統間的耦合度,使得不同的系統或服務之間可以更好地協同工作。因為請求處理過程中不會阻塞其他操作,可以更容易地實現分布式系統的調用。
  • 異常處理:異步請求可以更容易地捕獲、處理異常,因為請求處理的結果是在另一個線程中返回的,不會影響到主線程的執行流程。
  • 控制流程:異步請求可以通過回調函數或者Promise等方式來控制流程,使得流程更加靈活和可擴展。
  • 總之,異步請求接口具有上述優勢,尤其是在高并發場景下,能夠提高系統的性能和可用性,是解決并發問題的有效方法之一。

3. 應用場景

異步請求接口可以應用于以下場景:

  • 高并發場景:在面對大量用戶請求時,異步請求接口能夠避免線程阻塞,提高系統的并發處理能力,減少等待時間,提升用戶體驗。
  • 耗時操作處理:當需要進行一些耗時的操作,如網絡請求、IO磁盤等操作時,采用異步請求接口可以避免阻塞主線程,提高系統的響應性能。
  • 實時數據處理:對于實時性要求較高的應用,如實時數據流處理、實時股票交易等場景,采用異步請求接口能夠快速處理數據,并實時反饋結果,提高系統的實時性。
  • 異步業務流程:在某些業務流程中,涉及到多個異步任務,這些任務之間沒有依賴關系,可以采用異步請求接口進行實現,提高系統的并發性和響應性能。
  • API接口的調用:當需要對其他API接口進行調用時,特別是對于一些耗時較長的接口,采用異步請求接口可以提高系統的響應性能和資源利用率。

總之,異步請求接口適用于那些需要避免阻塞、提高系統響應性能、處理耗時操作和實時數據處理等場景中,能夠提高系統的并發性能和資源利用率,減少系統瓶頸的出現。

接下來我們進入正文,在Spring環境下如何將我們的接口異步化。

4. 實戰異步接口

Spring MVC 廣泛集成了 Servlet 3.0 異步請求處理功能:

  • Controller方法中的 DeferredResult 和 Callable 返回值為單個異步返回值提供了基本支持。
  • Controller可以流式傳輸多個值,包括 SSE 和原始數據。
  • Controller可以使用反應式客戶端和返回反應式類型來處理響應。

4.1 DeferredResult

一旦在 Servlet 容器中啟用異步請求處理功能,控制器方法就可以用 DeferredResult 封裝任何受支持的控制器方法返回值,如下例所示:

@GetMapping("/deferred")
@ResponseBody
public DeferredResult<Map<String, Object>> deferred(){
  long start = System.currentTimeMillis() ;
  System.out.printf("%s - 開始時間:%d%n", Thread.currentThread().getName(), start) ;
  DeferredResult<Map<String, Object>> deferredResult = new DeferredResult<>();
  // 為了演示方便直觀,這里直接創建線程
  new Thread(() -> {
    try {
      // 這里模擬耗時操作
      TimeUnit.SECONDS.sleep(3) ;
      // 將執行結果保存
      Map<String, Object> result = new HashMap<>() ;
      result.put("code", 1) ;
      result.put("data", "你的業務數據") ;
      deferredResult.setResult(result) ;
    } catch (InterruptedException e) {}
  }).start() ;
  long end = System.currentTimeMillis() ;
  System.out.printf("%s - 結束時間:%d%n", Thread.currentThread().getName(), end) ;
  System.out.printf("總耗時:%d毫秒%n", (end - start)) ;
  return deferredResult ;
}

控制臺輸出結果:

2023-10-19 14:25:30.321  INFO 3884 --- [nio-8808-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
http-nio-8808-exec-1 - 開始時間:1697696730335
http-nio-8808-exec-1 - 結束時間:1697696730335
總耗時:0毫秒

從結果看出,處理請求的tomcat線程幾乎沒有占用時間,線程被快速的釋放,這樣就可以去處理其它的連接請求,整個系統的吞吐量就的到了明顯的提升。

Controller可以從不同的線程異步生成返回值。

4.2 Callable

Controller可以用 java.util.concurrent.Callable 封裝任何受支持的返回值,如下例所示:

@GetMapping("/callable")
public Callable<Map<String, Object>> callable() {
  long start = System.currentTimeMillis() ;
  System.out.printf("%s - 開始時間:%d%n", Thread.currentThread().getName(), start) ;
  Callable<Map<String, Object>> callable  = new Callable<Map<String, Object>>() {
    public Map<String, Object> call() throws Exception {
      Map<String, Object> result = new HashMap<>() ;
      try {
        // 這里模擬耗時操作
        TimeUnit.SECONDS.sleep(3) ;
        // 將執行結果保存
        result.put("code", 1) ;
        result.put("data", "你的業務數據") ;
      } catch (InterruptedException e) {}
      return result ;
    }
  } ;
  long end = System.currentTimeMillis() ;
  System.out.printf("%s - 結束時間:%d%n", Thread.currentThread().getName(), end) ;
  System.out.printf("總耗時:%d毫秒%n", (end - start)) ;
  return callable ;
}

控制臺輸出結果:

http-nio-8808-exec-2 - 開始時間:1697697345385
http-nio-8808-exec-2 - 結束時間:1697697345386
總耗時:1毫秒

執行結果與上面一樣。
注意:這里Callable中的代碼執行是在系統默認的一個TaskExecutor線程池中運行,我們可以通過配置自己的TaskExecutor來執行。如下:

@Bean
public ThreadPoolTaskExecutor myAsyncTaskExecutor() {
  // 配置ThreadPoolTaskExecutor相關參數,比如核心線程數等
  return ... ;
}

4.3 ResponseBodyEmitter

你可以將 DeferredResult 和 Callable 用于單個異步返回值。如果要生成多個異步值并將其寫入響應,該怎么辦?本節將介紹如何做到這一點。

ResponseBodyEmitter 的返回值生成一個對象流,其中每個對象都會被 HttpMessageConverter 序列化并寫入響應,如下例所示:

// 這里應該保存到一個集合中
private ResponseBodyEmitter emitter ;
@GetMapping("/emitter")
public ResponseBodyEmitter emitter() throws Exception {
  ResponseBodyEmitter bodyEmitter = new ResponseBodyEmitter(-1L);
  this.emitter = bodyEmitter ;
  return bodyEmitter;
}
// 可以不斷調用該接口進行消息的發送
@GetMapping("/sender")
public void sender() throws Exception {
  this.emitter.send(System.currentTimeMillis()) ;
}
// 調用該j接口后請求結束
@GetMapping("/complete")
public void complete() throws Exception {
  this.emitter.complete() ;
}

當訪問/emitter接口時,瀏覽器會一直轉圈,一直等待。只有調用了/complete接口后請求內容才會被發送到客戶端并結束請求。

4.4 StreamingResponseBody

有時,繞過消息轉換并直接流式傳輸到響應的 OutputStream(例如,文件下載)非常有用。為此,可以使用 StreamingResponseBody 返回值類型,如下例所示:

@GetMapping("/stream")
public ResponseEntity<StreamingResponseBody> stream() {
  long start = System.currentTimeMillis() ;
  System.out.printf("%s - 開始時間:%d%n", Thread.currentThread().getName(), start) ;
  // 內部執行還是用的系統內部的線程池
  StreamingResponseBody stream = new StreamingResponseBody() {
    @Override
    public void writeTo(OutputStream outputStream) throws IOException {
      outputStream.write(String.valueOf("當前時間: " + System.currentTimeMillis() + "<br/>").getBytes()) ;
      try {
        TimeUnit.SECONDS.sleep(1) ;
      } catch (InterruptedException e) {}
      outputStream.write(String.valueOf("當前時間: " + System.currentTimeMillis() + "<br/>").getBytes()) ;
      try {
        TimeUnit.SECONDS.sleep(1) ;
      } catch (InterruptedException e) {}
      outputStream.write(String.valueOf("當前時間: " + System.currentTimeMillis() + "<br/>").getBytes()) ;
    }
  };
  MultiValueMap<String, String> headers = new HttpHeaders() ;
  headers.add("Content-Type", "text/html;charset=UTF-8") ;
  ResponseEntity<StreamingResponseBody> response = new ResponseEntity<StreamingResponseBody>(stream, headers , HttpStatus.OK) ;


  long end = System.currentTimeMillis() ;
  System.out.printf("%s - 結束時間:%d%n", Thread.currentThread().getName(), end) ;
  System.out.printf("總耗時:%d毫秒%n", (end - start)) ;
  return response ;
}

控制臺輸出:

http-nio-8808-exec-1 - 開始時間:1697700256912
http-nio-8808-exec-1 - 結束時間:1697700256915
總耗時:3毫秒

tomcat線程非常短的時間內釋放,這樣就可以處理更多的請求,提升系統整體的吞吐量。這種最適合文件下載。

瀏覽器輸出:

圖片

4.5 SSE

該方式請閱讀《實時數據推送并非只有WebSocket一種選擇》詳細介紹了如何使用。

4.6 基于反應式

Spring MVC 支持在控制器中使用反應式客戶端庫。這包括 spring-webflux 中的 WebClient 以及 Spring Data 反應式數據存儲庫等其他庫。在這種情況下,從控制器方法中返回反應類型是很方便的。如下例所示:

@GetMapping("/mono")
public Mono<Map<String, Object>> mono() {
  long start = System.currentTimeMillis() ;
  System.out.printf("%s - 開始時間:%d%n", Thread.currentThread().getName(), start) ;
  Mono<Map<String, Object>> mono = Mono.defer(() -> {
    try {
      TimeUnit.SECONDS.sleep(3) ;
    } catch (InterruptedException e) {}
    Map<String, Object> result = new HashMap<>() ;
    result.put("code", 1) ;
    result.put("data", "你的業務數據") ;
    return Mono.just(result) ;
  }) ;
  long end = System.currentTimeMillis() ;
  System.out.printf("%s - 結束時間:%d%n", Thread.currentThread().getName(), end) ;
  System.out.printf("總耗時:%d毫秒%n", (end - start)) ;
  return mono ;
}

控制臺輸出:

http-nio-8808-exec-2 - 開始時間:1697700686250
http-nio-8808-exec-2 - 結束時間:1697700686251
總耗時:1毫秒


以上就是Spring中異步請求接口的實現方式。

異步請求接口是解決并發問題的有效方法之一,特別是在高并發、耗時操作、實時數據處理等場景中具有顯著優勢。通過異步請求,系統能夠避免阻塞線程,提高系統的響應性能和資源利用率。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2023-10-23 08:12:34

并發問題有鎖和無鎖

2012-07-17 10:54:49

AJAX

2012-02-02 15:57:09

HibernateJava

2009-11-25 13:33:39

并發

2022-09-13 13:49:05

數據庫隔離

2024-01-31 08:50:41

Guava并發工具

2009-06-29 09:38:50

JSF標簽JSF

2022-12-27 11:06:35

海量接口并發

2020-07-07 07:47:07

Java無鎖技術

2021-08-10 07:00:01

Redis單線程并發

2024-08-13 17:35:27

2011-08-03 10:39:06

IOS程序 HTTP 請求

2024-04-16 00:00:00

Spring微服務架構

2024-06-12 00:00:01

Java函數式接口

2022-04-02 20:27:30

ETS操作系統鴻蒙

2009-01-11 10:23:00

網絡掉線頻繁掉線

2009-11-26 16:30:52

Suse中文亂碼問題

2024-06-03 00:00:01

2023-11-09 08:18:31

Hystrix保護系統資源隔離

2024-03-28 08:41:10

高并發.NET異步編程
點贊
收藏

51CTO技術棧公眾號

黄色正能量网站| 久久爱av电影| 国产又黄又爽又无遮挡| 成人在线视频www| 亚洲精品国产第一综合99久久| 91在线中文字幕| 精品无码久久久久久久久| 风间由美一区二区av101| 亚洲午夜精品在线| 久久久久久久久久久久久久一区| 天天干天天操天天操| 水蜜桃精品av一区二区| 日韩精品一区二区三区中文不卡 | 图片小说视频色综合| 91精品国产综合久久香蕉麻豆| 黄色小视频大全| 蜜桃视频在线观看网站| 久久国产三级精品| 国内精品久久久久久中文字幕| 欧美特黄一区二区三区| 伊人久久大香线蕉综合影院首页| 亚洲第一在线综合网站| 日韩欧美三级一区二区| 亚洲高清视频网站| 日韩综合小视频| 久久99精品视频一区97| 亚洲区自拍偷拍| 亚洲免费一区三区| 亚洲国产精品久久不卡毛片| 日韩国产精品一区二区| 好吊视频一二三区| 另类欧美日韩国产在线| 91国产视频在线| 免费国产羞羞网站美图| 亚洲区小说区| 亚洲国产精品va在看黑人| 日韩av在线中文| 嗯~啊~轻一点视频日本在线观看| 久久久久久亚洲综合影院红桃| 99国精产品一二二线| 中文字幕日日夜夜| 欧美日韩国产在线一区| 深夜精品寂寞黄网站在线观看| 久久久久成人精品无码中文字幕| av日韩亚洲| 亚洲v中文字幕| 中文字幕乱码免费| 亚洲视频tv| 国产无人区一区二区三区| 精品国产乱码久久久久久蜜柚| 国产又粗又黄又爽| 日韩高清在线电影| 欧美专区中文字幕| 日本在线视频免费观看| 国内精品福利| 久久夜精品香蕉| 国产又粗又硬又长又爽| 一本久久青青| 精品亚洲一区二区三区四区五区| 性农村xxxxx小树林| 精品一区二区三区中文字幕视频 | 136福利第一导航国产在线| 日韩久久一区二区| 在线观看日韩羞羞视频| 999国产在线视频| 国产农村妇女毛片精品久久麻豆| 免费在线成人av| 免费在线黄色影片| wwwwww.欧美系列| 精品九九九九| 香蕉久久一区二区三区| 99re成人精品视频| 九色综合日本| 免费在线超碰| 国产亚洲人成网站| 先锋影音亚洲资源| 最新国产在线观看| 国产精品私人影院| 一区二区三区四区久久| 欧洲美女少妇精品| 亚洲同性gay激情无套| 一级性生活视频| 青草在线视频| 欧美日韩激情视频8区| r级无码视频在线观看| 999av小视频在线| 性做久久久久久| 男女午夜激情视频| 无人区在线高清完整免费版 一区二 | 色av综合在线| 一路向西2在线观看| 亚洲男人在线| 精品剧情在线观看| 亚洲av无码一区二区三区观看| 亚洲春色h网| 伊人久久五月天| 久久久久久久久久网站| 亚洲欧洲综合| 国产精品久久久av久久久| 夜夜爽8888| 成人在线视频一区二区| 久中文字幕一区| 色的视频在线免费看| 亚洲欧美国产高清| 黄色动漫网站入口| 日本在线一区二区| 亚洲电影免费观看高清完整版在线| 欧美亚一区二区三区| 理论片一区二区在线| 中文字幕精品久久久久| 久久久精品国产sm调教网站| 性久久久久久| 97操在线视频| wwwxxx在线观看| 午夜成人免费电影| 天天干天天玩天天操| 狼人精品一区二区三区在线 | 亚洲综合小说区| 免费在线黄色网址| 亚洲综合一二区| 久久99爱视频| 欧美在线导航| 久久激情五月丁香伊人| 国产成人综合欧美精品久久| 精品一区二区三区在线观看国产 | 你懂的在线观看一区二区| 中文字幕av一区二区三区谷原希美| 久久中文字幕无码| 蜜桃av一区二区三区| av在线不卡一区| 91吃瓜网在线观看| 精品久久久久久久久久国产| 91欧美一区二区三区| 九九热精品视频在线观看| 欧美—级高清免费播放| 在线观看国产成人| 国产亚洲欧洲997久久综合| 成人免费性视频| 91九色成人| 在线精品国产成人综合| 欧美极品aaaaabbbbb| 日本视频一区二区三区| 免费影院在线观看一区| 妞干网免费在线视频| 日韩色在线观看| 国产精品视频一区二区在线观看| 久久午夜影视| av有码在线观看| 婷婷久久综合九色综合伊人色| 在线观看视频在线观看| 999视频精品| 成人av资源在线播放| 美女隐私在线观看| 欧美精品久久一区二区三区| 亚洲欧美另类日本| 国产美女视频91| 国产一级不卡视频| 欧美黑白配在线| 51ⅴ精品国产91久久久久久| 全部免费毛片在线播放网站| 日韩欧美999| 国产在线综合视频| 久久91精品国产91久久小草| 秋霞在线一区二区| 欧美成人精品午夜一区二区| 欧美国产日韩视频| 天堂在线资源库| 色婷婷久久久综合中文字幕| 日本理论中文字幕| 国产一区二区免费看| 国产片侵犯亲女视频播放| 亚洲第一二区| 欧美在线视频一区二区| 黄色小视频在线免费观看| 欧美日韩日日骚| 美女毛片在线观看| 久久先锋资源网| 加勒比av中文字幕| 亚洲国产日本| 亚洲国产一区二区精品视频| 午夜视频一区二区在线观看| 91爱视频在线| 老司机精品视频在线观看6| 亚洲精品一线二线三线| 波多野结衣一本一道| 亚洲精品国产a久久久久久| 亚洲av无码成人精品国产| 免费人成精品欧美精品 | av在线日韩国产精品| 日韩欧美精品在线观看| www.99re6| 成人国产精品免费| 天堂在线资源视频| 欧美午夜不卡影院在线观看完整版免费| 精品日产一区2区三区黄免费| 日本成人在线网站| 97超级碰在线看视频免费在线看| a黄色在线观看| 欧美精品一区二区三| 精品国产www| 亚洲午夜激情av| 一本色道久久88| 99久久综合狠狠综合久久| 色啦啦av综合| 久久久久国产精品一区二区| 日本大胆人体视频| 精品国产aⅴ| 精品日韩欧美| 国产精品qvod| 91国产丝袜在线放| 国产国产一区| 欧美一级淫片丝袜脚交| 丝袜综合欧美| 久久精品在线视频| 成年人视频在线免费观看| 精品精品国产高清一毛片一天堂| 亚洲第一区av| 一本一道久久a久久精品| 久久精品免费在线| 亚洲欧美色一区| 国产又黄又粗视频| 久久久精品欧美丰满| 国产毛片毛片毛片毛片毛片毛片| 国产精品一二三四| 三级一区二区三区| 免费高清在线视频一区·| 欧美日韩亚洲一| 99国内精品| 国产精品无码免费专区午夜| 综合色一区二区| 一区中文字幕在线观看| 欧美第十八页| 亚洲精品一区二区三区四区五区| 国产一区2区| 欧美亚州在线观看| 自拍欧美一区| 日本福利一区二区三区| 亚洲专区视频| 日本一区视频在线| 国产一区二区三区网| 久久精品一二三区| 亚洲福利天堂| 久久av二区| 麻豆一区二区| 国产精品18毛片一区二区| 欧美一级大片在线视频| 91黄色国产视频| 99久热这里只有精品视频免费观看| 懂色中文一区二区三区在线视频| 亚洲2区在线| 国产在线资源一区| 四虎影视精品| 日韩av一区二区三区美女毛片| 亚洲警察之高压线| 无遮挡亚洲一区| 99久久久久| 久久久久福利视频| 一区二区自拍| 国产肥臀一区二区福利视频| 日韩高清在线不卡| 天天色天天干天天色| 成人性生交大合| 亚洲成人日韩在线| 欧美激情综合五月色丁香| 性生交大片免费全黄| 亚洲综合自拍偷拍| 青青草免费观看视频| 欧美天天综合网| 精品国自产在线观看| 亚洲国产精品嫩草影院久久| 你懂的在线观看| 久久精品国产免费观看| 久久香蕉av| 国产成人精品日本亚洲| 亚洲精品自拍| 黄色小网站91| 日韩欧美中文| 国产一区二区三区乱码| 天堂精品中文字幕在线| 亚洲综合20p| 91美女片黄在线| 91视频青青草| 一本大道久久a久久综合| 一级黄色片在线| 日韩av网站大全| 色哟哟免费在线观看| 午夜免费日韩视频| 国产成人免费精品| 国产乱码精品一区二区三区中文 | 国产精品乱子伦| 欧美日韩一本到| 日本激情视频网站| 亚洲一区二区国产| 国产桃色电影在线播放| 国产精品免费福利| 国产伦精品一区二区三区在线播放 | 日韩大片在线观看| 小泽玛利亚av在线| 日日夜夜一区二区| 日批免费观看视频| 国产精品麻豆网站| 日韩欧美亚洲一区二区三区| 欧美日韩亚洲另类| 香蕉久久一区二区三区| 久久亚洲综合国产精品99麻豆精品福利 | 精品人妻一区二区免费| 国产精品乱人伦一区二区| 久久久久久久极品| 日韩欧美亚洲另类制服综合在线| 成人jjav| 欧美中文在线视频| 97人人澡人人爽91综合色| 一区二区在线不卡| 日韩综合小视频| 久久久精品人妻无码专区| 亚洲国产一区二区视频| 国产女人18毛片水18精| 国产亚洲精品美女久久久久| а√在线中文在线新版| 成人午夜小视频| 色777狠狠狠综合伊人| 久久精品午夜福利| 99久久伊人网影院| 免费一级片在线观看| 在线播放日韩导航| 99reav在线| 国产精品一区av| 自拍偷拍精品| 久久久久久久久久福利| 91日韩在线专区| 久久青青草原亚洲av无码麻豆| 亚洲成人国产精品| av成人福利| 国产精品一区二区三区免费观看 | 欧美丰满片xxx777| 玖玖玖视频精品| 男女啪啪免费观看| 国产一区二区导航在线播放| 久久福利免费视频| 欧美肥妇毛茸茸| 成人福利在线观看视频| 91在线观看免费网站| 五月激情久久久| 一级黄色高清视频| 一区二区三区在线看| 亚洲av无码国产精品永久一区| 精品中文字幕在线2019| 在线一区二区三区视频| 国产精品一线二线三线| 99国产精品久久| 黄色片视频免费| 综合欧美国产视频二区| 国产精品一区免费在线| 老汉色影院首页| 豆国产96在线|亚洲| 日产欧产va高清| 日韩精品在线视频美女| 二吊插入一穴一区二区| 亚洲精品一区二| 国产一区二区中文字幕| 久久一区二区三| 亚洲欧美成人精品| 少妇高潮一区二区三区99| 特级黄色录像片| 成人综合婷婷国产精品久久蜜臀| 91精品国产乱码久久久张津瑜| 亚洲精品中文字幕av| 日韩一区二区三区免费视频| 麻豆md0077饥渴少妇| 波波电影院一区二区三区| 久久久久久久久久久影院| 深夜福利国产精品| 波多野结衣在线一区二区| 动漫av网站免费观看| 国产精品久久久久桃色tv| 国产成人精品亚洲精品色欲| 久久久综合av| 成人一级毛片| 国产国语老龄妇女a片| 日韩欧美亚洲一二三区| 久操视频在线观看| 久久精品第九区免费观看| 美女网站视频久久| 日韩视频免费观看高清| 国产一区二区动漫| 成人三级av在线| 一路向西2在线观看| 亚洲国产一区视频| 日本中文字幕在线2020| 国产乱码一区| 精彩视频一区二区三区| 久久久午夜影院| 成人97在线观看视频| 国产精品欧美在线观看| 国产成人精品一区二区在线小狼| 91激情五月电影| free性护士videos欧美| 影音先锋在线亚洲| 久久午夜老司机| 丁香六月天婷婷|