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

大部分程序員不知道的 Servelt3 異步請求,原來這么簡單?

開發(fā) 后端
想象一下如果業(yè)務(wù)需要較長時(shí)間處理,那么這個(gè) Tomcat 線程其實(shí)一直在被占用,隨著請求越來越多,可用 I/O 線程越來越少,直到被耗盡。這時(shí)后續(xù)請求只能等待空閑 Tomcat 線程,這將會(huì)加長了請求執(zhí)行時(shí)間。

 用同步請求模型,所有動(dòng)作都交給同一個(gè) Tomcat 線程處理,所有動(dòng)作處理完成,線程才會(huì)被釋放回線程池。

想象一下如果業(yè)務(wù)需要較長時(shí)間處理,那么這個(gè) Tomcat 線程其實(shí)一直在被占用,隨著請求越來越多,可用 I/O 線程越來越少,直到被耗盡。這時(shí)后續(xù)請求只能等待空閑 Tomcat 線程,這將會(huì)加長了請求執(zhí)行時(shí)間。

如果客戶端不關(guān)心返回業(yè)務(wù)結(jié)果,這時(shí)我們可以自定義線程池,將請求任務(wù)提交給線程池,然后立刻返回。

[[320914]]

也可以使用 Spring Async 任務(wù),大家感興趣可以自行查找一下資料

但是很多場景下,客戶端需要處理返回結(jié)果,我們沒辦法使用上面的方案。在 Servlet2 時(shí)代,我們沒辦法優(yōu)化上面的方案。

不過等到 Servlet3 ,引入異步 Servlet 新特性,可以完美解決上面的需求。

異步 Servlet 執(zhí)行請求流程:

將請求信息解析為 HttpServletRequest

分發(fā)到具體 Servlet 處理,將業(yè)務(wù)提交給自定義業(yè)務(wù)線程池,請求立刻返回,Tomcat 線程立刻被釋放

當(dāng)業(yè)務(wù)線程將任務(wù)執(zhí)行結(jié)束,將會(huì)將結(jié)果轉(zhuǎn)交給 Tomcat 線程

通過 HttpServletResponse 將響應(yīng)結(jié)果返回給等待客戶端

引入異步 Servlet3 整體流程如下:

使用異步 Servelt,Tomcat 線程僅僅處理請求解析動(dòng)作,所有耗時(shí)較長的業(yè)務(wù)操作全部交給業(yè)務(wù)線程池,所以相比同步請求, Tomcat 線程可以處理 更多請求。

雖然我們將業(yè)務(wù)處理交給業(yè)務(wù)線程池異步處理,但是對于客戶端來講,其還在同步等待響應(yīng)結(jié)果。

可能有些同學(xué)會(huì)覺得異步請求將會(huì)獲得更快響應(yīng)時(shí)間,其實(shí)不是的,相反可能由于引入了更多線程,增加線程上下文切換時(shí)間。

雖然沒有降低響應(yīng)時(shí)間,但是通過請求異步化帶來其他明顯優(yōu)點(diǎn):

  • 可以處理更高并發(fā)連接數(shù),提高系統(tǒng)整體吞吐量
  • 請求解析與業(yè)務(wù)處理完全分離,職責(zé)單一
  • 自定義業(yè)務(wù)線程池,我們可以更容易對其監(jiān)控,降級等處理
  • 可以根據(jù)不同業(yè)務(wù),自定義不同線程池,相互隔離,不用互相影響

所以具體使用過程,我們還需要進(jìn)行的相應(yīng)的壓測,觀察響應(yīng)時(shí)間以及吞吐量等其他指標(biāo),綜合選擇。

異步 Servelt 使用方式

異步 Servelt 使用方式不是很難,阿粉總結(jié)就是下面三板斧:

  1. HttpServletRequest#startAsync 獲取 AsyncContext 異步上下文對象
  2. 使用自定義的業(yè)務(wù)線程池處理業(yè)務(wù)邏輯
  3. 業(yè)務(wù)線程處理結(jié)束,通過 AsyncContext#complete 返回響應(yīng)結(jié)果

下面的例子將會(huì)使用 SpringBoot ,Web 容器選擇 Tomcat

示例代碼如下:

  1. ExecutorService executorService = Executors.newFixedThreadPool(10); 
  2.  
  3. @RequestMapping("/hello"
  4. public void hello(HttpServletRequest request) { 
  5.     AsyncContext asyncContext = request.startAsync(); 
  6.     // 超時(shí)時(shí)間 
  7.     asyncContext.setTimeout(10000); 
  8.     executorService.submit(() -> { 
  9.         try { 
  10.             // 休眠 5s,模擬業(yè)務(wù)操作 
  11.             TimeUnit.SECONDS.sleep(5); 
  12.             // 輸出響應(yīng)結(jié)果 
  13.             asyncContext.getResponse().getWriter().println("hello world"); 
  14.             log.info("異步線程處理結(jié)束"); 
  15.         } catch (Exception e) { 
  16.             e.printStackTrace(); 
  17.         } finally { 
  18.             asyncContext.complete(); 
  19.         } 
  20.     }); 
  21.     log.info("servlet 線程處理結(jié)束"); 

瀏覽器訪問該請求將會(huì)同步等待 5s 得到輸出響應(yīng),應(yīng)用日志輸出結(jié)果如下:

  1. 2020-03-24 07:27:08.997  INFO 79257 --- [nio-8087-exec-4] com.xxxx   : servlet 線程處理結(jié)束 
  2. 2020-03-24 07:27:13.998  INFO 79257 --- [pool-1-thread-3] com.xxxx   : 異步線程處理結(jié)束 

這里我們需要注意設(shè)置合理的超時(shí)時(shí)間,防止客戶端長時(shí)間等待。

SpringMVC

Servlet3 API ,無法使用 SpringMVC 為我們提供的特性,我們需要自己處理響應(yīng)信息,處理方式相對繁瑣。

SpringMVC 3.2 基于 Servelt3 引入異步請求處理方式,我們可以跟使用同步請求一樣,方便使用異步請求。

SpringMVC 提供有兩種異步方式,只要將 Controller 方法返回值修改下述類即可:

  • DeferredResult
  • Callable

DeferredResult

DeferredResult 是 SpringMVC 3.2 之后引入新的類,只要讓請求方法返回DeferredResult,就可以快速使用異步請求,示例代碼如下:

  1. ExecutorService executorService = Executors.newFixedThreadPool(10); 
  2.  
  3. @RequestMapping("/hello_v1"
  4. public DeferredResult<String> hello_v1() { 
  5.     // 設(shè)置超時(shí)時(shí)間 
  6.     DeferredResult<String> deferredResult = new DeferredResult<>(7000L); 
  7.     // 異步線程處理結(jié)束,將會(huì)執(zhí)行該回調(diào)方法 
  8.     deferredResult.onCompletion(() -> { 
  9.         log.info("異步線程處理結(jié)束"); 
  10.     }); 
  11.     // 如果異步線程執(zhí)行時(shí)間超過設(shè)置超時(shí)時(shí)間,將會(huì)執(zhí)行該回調(diào)方法 
  12.     deferredResult.onTimeout(() -> { 
  13.         log.info("異步線程超時(shí)"); 
  14.         // 設(shè)置返回結(jié)果 
  15.         deferredResult.setErrorResult("timeout error"); 
  16.     }); 
  17.     deferredResult.onError(throwable -> { 
  18.         log.error("異常", throwable); 
  19.         // 設(shè)置返回結(jié)果 
  20.         deferredResult.setErrorResult("other error"); 
  21.     }); 
  22.     executorService.submit(() -> { 
  23.         try { 
  24.             TimeUnit.SECONDS.sleep(5); 
  25.             deferredResult.setResult("hello_v1"); 
  26.             // 設(shè)置返回結(jié)果 
  27.         } catch (Exception e) { 
  28.             e.printStackTrace(); 
  29.             // 若異步方法內(nèi)部異常 
  30.             deferredResult.setErrorResult("error"); 
  31.         } 
  32.     }); 
  33.     log.info("servlet 線程處理結(jié)束"); 
  34.     return deferredResult; 
  35.  

創(chuàng)建 DeferredResult 實(shí)例時(shí)可以傳入特定超時(shí)時(shí)間。另外我們可以設(shè)置默認(rèn)超時(shí)時(shí)間:

  1. # 異步請求超時(shí)時(shí)間 
  2. spring.mvc.async.request-timeout=2000 

如果異步程序執(zhí)行完成,可以調(diào)用 DeferredResult#setResult返回響應(yīng)結(jié)果。此時(shí)若有設(shè)置 DeferredResult#onCompletion 回調(diào)方法,將會(huì)觸發(fā)該回調(diào)方法。

同時(shí)我們還可以設(shè)置超時(shí)回調(diào)方法 DeferredResult#onTimeout,一旦異步線程執(zhí)行超時(shí),將會(huì)觸發(fā)該回調(diào)方法。

最后 DeferredResult 還提供其他異常的回調(diào)方法 onError,起初阿粉以為只要異步線程內(nèi)發(fā)生異常,就會(huì)觸發(fā)該回調(diào)方法。嘗試在異步線程內(nèi)拋出異常,但是無法成功觸發(fā)。

后續(xù)阿粉查看這個(gè)方法的 doc,當(dāng) web 容器線程處理異步請求時(shí)發(fā)生異常,才能成功觸發(fā)。

 

Callable

Spring 另外還提供一種異步請求使用方式,直接使用 JDK Callable。示例代碼如下:

  1. @RequestMapping("/hello_v2"
  2. public Callable<String> hello_v2() { 
  3.     return new Callable<String>() { 
  4.         @Override 
  5.         public String call() throws Exception { 
  6.             TimeUnit.SECONDS.sleep(5); 
  7.             log.info("異步方法結(jié)束"); 
  8.             return "hello_v2"
  9.         } 
  10.     }; 

默認(rèn)情況下,直接執(zhí)行將會(huì)輸出 WARN 日志

這是因?yàn)槟J(rèn)情況使用 SimpleAsyncTaskExecutor 執(zhí)行異步請求,每次調(diào)用執(zhí)行都將會(huì)新建線程。由于這種方式不復(fù)用線程,生產(chǎn)不推薦使用這種方式,所以我們需要使用線程池代替。

我們可以使用如下方式自定義線程池:

  1. @Bean(TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME) 
  2. public AsyncTaskExecutor executor() { 
  3.     ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor(); 
  4.     threadPoolTaskExecutor.setThreadNamePrefix("test-"); 
  5.     threadPoolTaskExecutor.setCorePoolSize(10); 
  6.     threadPoolTaskExecutor.setMaxPoolSize(20); 
  7.     return threadPoolTaskExecutor; 

注意 Bean 名稱一定要是 applicationTaskExecutor,若不一致, Spring 將不會(huì)使用自定義線程池。

或者可以直接使用 SpringBoot 配置文件方式配置代替:

  1. # 核心線程數(shù) 
  2. spring.task.execution.pool.core-size=10 
  3. # 最大線程數(shù) 
  4. spring.task.execution.pool.max-size=20 
  5. # 線程名前綴 
  6. spring.task.execution.thread-name-prefix=test 
  7. # 還有另外一些配置,讀者們可以自行配置 

這種方式異步請求的超時(shí)時(shí)間只能通過配置文件方式配置。

  1. spring.mvc.async.request-timeout=10000 

如果需要為單獨(dú)請求的配置特定的超時(shí)時(shí)間,我們需要使用 WebAsyncTask 包裝 Callable 。

  1. @RequestMapping("/hello_v3"
  2. public WebAsyncTask<String> hello_v3() { 
  3.     System.out.println("asdas"); 
  4.     Callable<String> callable=new Callable<String>() { 
  5.         @Override 
  6.         public String call() throws Exception { 
  7.             TimeUnit.SECONDS.sleep(5); 
  8.             log.info("異步方法結(jié)束"); 
  9.             return "hello_v3"
  10.         } 
  11.     }; 
  12.     // 單位 ms 
  13.     WebAsyncTask<String> webAsyncTask=new WebAsyncTask<>(10000,callable); 
  14.     return webAsyncTask; 

總結(jié)

SpringMVC 兩種異步請求方式,本質(zhì)上就是幫我們包裝 Servlet3 API ,讓我們不用關(guān)心具體實(shí)現(xiàn)細(xì)節(jié)。雖然日常使用我們一般會(huì)選擇使用 SpringMVC 兩種異步請求方式,但是我們還是需要了解異步請求實(shí)際原理。所以大家如果在使用之前,可以先嘗試使用 Servlet3 API 練習(xí),后續(xù)再使用 SpringMVC。

  • Referencehttps://www.baeldung.com/spring-deferred-result
  • https://spring.io/blog/2012/05/07/spring-mvc-3-2-preview-introducing-servlet-3-async-support

 

責(zé)任編輯:武曉燕 來源: Java極客技術(shù)
相關(guān)推薦

2025-03-11 09:04:26

2020-04-15 16:07:01

程序員技術(shù)數(shù)據(jù)

2012-11-30 10:07:49

大數(shù)據(jù)云儲(chǔ)存數(shù)據(jù)挖掘

2021-02-08 22:32:43

程序員 靜態(tài)網(wǎng)頁

2019-09-12 09:56:13

程序員技能開發(fā)者

2019-10-11 10:05:30

程序員固態(tài)硬盤Google

2018-05-08 15:30:46

程序員代碼框架

2018-07-10 11:33:58

計(jì)算器iPhone刪除

2019-11-24 19:34:04

HTTP長連接短連接

2019-06-12 10:35:49

程序員高效工具開源

2011-08-23 13:50:17

程序員

2022-08-08 11:13:35

API接口前端

2020-03-03 18:59:47

CDN緩存程序員

2018-09-20 17:05:01

前端程序員JavaScript

2019-07-12 15:28:41

緩存數(shù)據(jù)庫瀏覽器

2023-10-11 08:16:42

客戶端服務(wù)器內(nèi)容

2021-11-30 22:59:28

程序員IT架構(gòu)師

2013-11-21 13:35:19

程序員牛人

2021-03-01 19:13:45

YAML程序員數(shù)據(jù)

2022-10-29 17:34:18

JVMJava
點(diǎn)贊
收藏

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

婷婷中文字幕一区三区| 国产精品亚洲一区二区三区在线| 精品视频久久久久久久| 色一情一乱一伦一区二区三区日本 | 日韩成人三级| 欧美一区二区三区日韩| www.中文字幕在线| 免费a级在线播放| 成人av在线观| 国产精品亚洲自拍| 国产在线一二区| 精品不卡在线| 国产伦精品一区二区三区免.费 | 色免费在线视频| 卡通动漫亚洲综合| 国产精品久久久网站| 欧美日韩精品一二三区| r级无码视频在线观看| 福利片在线看| 成人99免费视频| 国产日本欧美一区| 亚洲精品www久久久久久| 久久伦理在线| 亚洲欧美日韩中文视频| 韩国av中国字幕| 亚洲国产aⅴ精品一区二区三区| 午夜久久久久久电影| 一区二区在线观看网站| 青青视频在线观| 国产91精品久久久久久久网曝门| 国产精品久久一| 国产无人区码熟妇毛片多| 综合日韩在线| 日韩在线视频观看| 亚洲av无码一区二区三区人| 欧美久久香蕉| 精品国产亚洲一区二区三区在线观看| 少妇一级淫免费放| 韩国成人漫画| 精品久久久久久久久久久| av动漫在线播放| 成人国产免费电影| 国产精品家庭影院| 婷婷四月色综合| 黄上黄在线观看| 91丝袜美腿高跟国产极品老师| 懂色中文一区二区三区在线视频| 国产一区二区小视频| 免费高清不卡av| 国产精品成人aaaaa网站| 久久夜色精品亚洲| 狠狠综合久久| 久久久久久久久国产| 四虎精品免费视频| 影视一区二区| 久久999免费视频| 校园春色 亚洲| 中文精品电影| 九九久久综合网站| 久久精品第一页| 激情另类综合| 4k岛国日韩精品**专区| 国产黄色片免费看| 性色av一区二区怡红| 日本精品免费观看| 免费在线观看av的网站| 久久精品噜噜噜成人av农村| 成人激情视频免费在线| 99这里有精品视频| 一区免费在线| 国语自产偷拍精品视频偷| 男人天堂中文字幕| 亚洲美女视频在线免费观看 | 激情开心成人网| 欧洲生活片亚洲生活在线观看| 手机看片福利日韩| 久久精品国产福利| 91精品婷婷国产综合久久性色| 黄色a级三级三级三级| 一区二区三区视频免费视频观看网站| 精品国产伦一区二区三区免费| 国产精品入口麻豆| 尤物tv在线精品| xxxx性欧美| 日本少妇xxxx动漫| 日韩av不卡一区二区| 91网在线免费观看| 欧美熟女一区二区| 久久综合九色综合久久久精品综合| 色999五月色| 色呦呦呦在线观看| 欧美小视频在线| 免费精品99久久国产综合精品应用| 欧美高清一级片| 日韩成人黄色av| 亚欧美在线观看| 国产美女视频一区二区| 亚洲精品国精品久久99热一| 一级黄色毛毛片| 欧美私人啪啪vps| 欧美综合国产精品久久丁香| 97在线视频人妻无码| av亚洲精华国产精华精| 亚洲欧洲一二三| 国产传媒在线| 欧美精三区欧美精三区| 久久无码人妻精品一区二区三区| 欧美激情777| 7777kkkk成人观看| 国产美女三级无套内谢| 久久久五月婷婷| 欧美久久久久久久久久久久久久| 先锋欧美三级| 日韩av影视在线| 免费在线观看h片| 日韩精品一区第一页| 国产精品自拍首页| 成人影院在线观看| 欧美伊人久久大香线蕉综合69| 国产女人18毛片水真多18| 999精品视频| 国产成人97精品免费看片| 欧美一级性视频| 日韩电影免费观看高清完整版| 欧美久久成人| 国产激情视频一区| 成 人片 黄 色 大 片| 日本一区二区三区四区在线视频| 全黄性性激高免费视频| 国产精品久一| 日韩在线视频国产| 7799精品视频天天看| 成人精品在线视频观看| 最近看过的日韩成人| 欧美xnxx| 亚洲欧美中文另类| 五月天综合激情网| av成人动漫在线观看| 日韩精品一区二区在线视频| 涩涩涩久久久成人精品| 一区二区三区天堂av| 久久久久久久久久久影院| 国内精品久久久久久久97牛牛 | 国产91国语对白在线| 国产成人亚洲综合a∨婷婷| 日韩欧美三级一区二区| 成人性生交大片免费观看网站| 亚洲国产毛片完整版| 久久久精品91| 懂色av一区二区在线播放| 一本大道东京热无码aⅴ| 久久国际精品| 久久99精品久久久久久青青91| 99视频免费看| 亚洲情趣在线观看| 人妻激情偷乱视频一区二区三区| 中文精品久久| 99re资源| 国产拍在线视频| 亚洲精品乱码久久久久久按摩观| 国产无套内射又大又猛又粗又爽| 成人国产电影网| www插插插无码视频网站| 亚洲午夜免费| 97色在线观看| 蝌蚪视频在线播放| 欧美日韩国产综合视频在线观看 | 91综合久久一区二区| 成人国产精品日本在线| 高h视频在线观看| 精品日韩在线一区| 亚洲午夜18毛片在线看| 中文字幕国产一区二区| 91高清国产视频| 欧美久久影院| 蜜桃麻豆91| 成人免费一区| 久久6免费高清热精品| 免费观看黄色一级视频| 一本到三区不卡视频| 成年人免费视频播放| 国产河南妇女毛片精品久久久| 男人天堂av片| 精品久久久久久久久久久aⅴ| 成人国产亚洲精品a区天堂华泰| 免费毛片在线看片免费丝瓜视频| 日韩精品极品在线观看播放免费视频 | 色哟哟在线观看视频| 夜夜嗨一区二区| 亚洲欧美精品| 另类春色校园亚洲| 国产欧美精品va在线观看| 国精产品一区一区三区mba下载| 日韩精品在线观| 国产免费黄色网址| 亚洲成a人片在线不卡一二三区 | 国产小视频精品| 欧美色123| 日韩欧美视频一区二区| 一区二区三区在线免费看| 国产99久久精品一区二区| 久久综合之合合综合久久| 日韩精品中文字幕在线观看| 国产精品亚洲lv粉色| 日韩欧美第一页| 久草免费新视频| 国产免费观看久久| 亚洲永久无码7777kkk| 精品系列免费在线观看| 欧美激情成人网| 国产精品hd| 亚欧洲精品在线视频免费观看| 极品国产人妖chinesets亚洲人妖| 国产精品扒开腿做| 少妇视频在线观看| 欧美国产在线电影| 日本三级在线播放完整版| 亚洲人成网站999久久久综合| 亚洲第一黄色片| 欧美精品久久久久久久多人混战 | 国产精品亚洲不卡a| 深夜日韩欧美| 国产精品激情av电影在线观看| 波多野结衣久久| 久久精品小视频| 电影在线一区| 亚洲欧美一区二区三区四区| 天堂中文在线资源| 欧美va亚洲va香蕉在线| 国产一区二区三区三州| 精品视频999| 性高潮视频在线观看| 色先锋aa成人| 中文字幕黄色片| 欧美性精品220| 久久午夜免费视频| 午夜欧美在线一二页| 久久亚洲AV无码| 亚洲黄色小视频| 一区二区在线观看免费视频| 中文字幕人成不卡一区| 俄罗斯毛片基地| 国产欧美精品一区| 最新中文字幕av| 国产亚洲va综合人人澡精品 | 日本激情一区二区三区| 欧美变态口味重另类| 不卡视频在线播放| 日韩精品在线看片z| www.色日本| 精品国精品自拍自在线| 亚洲国产精品一| 精品粉嫩aⅴ一区二区三区四区| 黄色美女一级片| 亚洲黄色成人网| 日韩a级作爱片一二三区免费观看| 日韩av在线看| 免费在线视频一级不卡| 亚洲丝袜在线视频| 成人免费高清在线播放| 最近2019年日本中文免费字幕| av资源种子在线观看| 色婷婷成人综合| 亚洲精品白浆| 午夜精品一区二区三区在线视频| 中文字幕在线看片| 国产精品pans私拍| 男人天堂久久| 99porn视频在线| 秋霞蜜臀av久久电影网免费 | 95在线视频| 精品国产一区二区三区在线观看 | 亚洲三级视频在线观看| 久草福利资源在线观看| 色综合天天狠狠| 伊人久久国产精品| 日韩欧美一区在线| 日韩大胆人体| 另类少妇人与禽zozz0性伦| 日本精品600av| 日韩av电影手机在线| 亚洲成人1区| 久久精品五月婷婷| 欧美独立站高清久久| 亚洲色欲久久久综合网东京热| 久久久久99| 在线免费看v片| av电影在线观看完整版一区二区| 精品熟妇无码av免费久久| 一区二区三区四区高清精品免费观看| 国产香蕉视频在线| 欧美乱熟臀69xxxxxx| 日韩一区二区三区不卡| 在线不卡国产精品| av手机免费在线观看| 国产精品一区电影| 成人精品毛片| 一区二区三区四区视频在线观看| 在线精品在线| 中文字幕亚洲乱码| 99精品一区二区三区| 伊人久久久久久久久久久久久久| 五月婷婷综合在线| 国产一区二区三区视频免费观看| 亚洲精品国产福利| 超碰个人在线| 国产精品久久久久久久电影| 米奇精品关键词| 天天综合五月天| 三级精品在线观看| 99久久免费看精品国产一区| 亚洲视频一区二区在线| 午夜久久久久久久久久影院| 亚洲精品一区二区三区影院| 嫩草在线视频| 国产高清在线不卡| 日本福利一区| 无码日本精品xxxxxxxxx| 毛片一区二区三区| 性欧美13一14内谢| 天天亚洲美女在线视频| 精品久久无码中文字幕| 日韩中文字幕免费| 777午夜精品电影免费看| 久久久精品国产一区二区三区| 欧美激情综合| 久久这里只精品| 国产目拍亚洲精品99久久精品| 天天综合网久久综合网| 精品国产乱码久久久久久闺蜜| 99在线视频观看| 91精品免费视频| 97人人精品| 在线能看的av网站| 国产精品国产精品国产专区不蜜 | 91高清免费看| 7777精品伊人久久久大香线蕉的 | 精品国产乱码久久久久久果冻传媒| 男女视频网站在线观看| 成人综合婷婷国产精品久久免费| 日本天堂中文字幕| 欧美一区二区免费观在线| 麻豆av在线导航| 成人羞羞国产免费| 999国产精品999久久久久久| 久热精品在线观看视频| 国产精品麻豆网站| 一级全黄少妇性色生活片| 中文字幕在线亚洲| 四虎国产精品永久在线国在线| 中文字幕一区二区三区乱码| 精品一区免费av| 岛国毛片在线观看| 欧美成人在线直播| 波多野在线观看| 另类小说综合网| 日本视频免费一区| 国产91在线播放九色| 正在播放一区二区| 美女网站视频在线| 久久久精品动漫| 蜜桃精品视频在线| 老熟妇高潮一区二区三区| 欧美一级片在线看| 波多野结衣在线播放| 欧美三日本三级少妇三99| 免费一级欧美片在线观看| 天天色影综合网| 精品国产乱码久久久久久影片| 免费h在线看| 五月天丁香综合久久国产| 韩国精品一区二区| 久久久久久久久精| 亚洲女人天堂av| 亚洲网站三级| 水蜜桃色314在线观看| 久久伊人中文字幕| 97国产精品久久久| 欧美激情18p| 国产午夜一区| 男生操女生视频在线观看| 亚洲一区二区av电影| 黄色片在线免费看| 亚洲www永久成人夜色| 在线亚洲欧美| 久久成人小视频| 亚洲福利视频在线| 岛国一区二区| 久久国产午夜精品理论片最新版本| 久久久亚洲综合| 国产福利第一视频| 日韩av免费在线看| 一本到12不卡视频在线dvd| 欧美 日本 国产| 欧美一区二区视频观看视频| 成人亚洲欧美| 欧美激情亚洲天堂| 国产精品视频在线看| 日本激情一区二区三区| 91精品久久久久久久久久入口|