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

如何用Spring WebFlux構建Reactive REST API

譯文
開發 后端
在本文中,我們將討論如何使用Spring WebFlux來構建響應式REST API,Reactive API的實現,以及響應式規范的優勢。

【51CTO.com快譯】

在本文中,我們將討論如何使用Spring WebFlux來構建響應式REST API。在正式討論之前,讓我們首先來看看系統的開發,傳統REST在實現中遇到的問題,以及當前API的普遍需求。

下圖簡要地羅列了傳統應用和現代應用系統的主要特點。如今的系統講求的是:分布式應用、云原生、高可用性和可擴展性。因此,有效地利用系統現有的資源是至關重要的。

 

應用程序API需求的演變

那么傳統的REST API請求處理又是如何工作的呢?

 

傳統REST API模型

如上圖所示,傳統REST API會帶來如下問題:

  •  阻塞和同步 → 通常,請求線程會去等待各種阻塞的I/O直至結束之后,才能被釋放,進而將響應返回給調用方。
  •  每個請求的線程數 → Web容器會用到基于請求的線程(thread-per-request)模型。該模型限制了待處理的并發請求數量。也就是說,容器會對請求進行排隊,進而最終影響到API的性能。
  • 處理高并發用戶的限制 → 正是由于Web容器使用了基于請求的線程模型,因此我們無法去處理那些高并發量的請求。
  • 無法更好地利用系統資源 → 阻塞的I/O會造成線程處于空閑狀態,進而導致Web容器無法接受更多的請求,我們也就無法有效地利用現有的系統資源。
  •  沒有背壓(backpressure)支持 → 由于我們無法從客戶端或服務器處施加背壓,因此應用程序在負載量大時,無法維持正常運行。也就是說,倘若應用突然面臨大量的請求,則服務器或客戶端可能會由于中斷,而無法訪問到該應用。

下面,讓我們來看看響應式API的優勢,以及如何使用響應式編程,來解決上述問題。

  • 異步和無阻塞 → 響應式編程為編寫異步和非阻塞應用程序提供了靈活性。
  • 事件/消息驅動 → 系統能夠為任何活動生成對應的事件或消息。例如,那些來自數據庫的數據會被視為事件流。
  • 支持背壓 → 我們可以通過施加背壓,來優雅地”處理從一個系統到另一個系統的壓力,從而避免了拒絕服務的出現。
  • 可預測的應用響應時間 → 由于線程是異步且非阻塞的,因此我們可以預測負載下的應用響應時間。
  • 更好地利用系統資源 → 同樣由于線程是異步且非阻塞的,因此各種線程不會被I/O所占用,它們能夠支持更多的用戶請求。
  • 基于負載的擴容方式
  • 擺脫基于請求的線程 → 借助響應式API,并得益于異步且非阻塞的線程,我們可以擺脫基于請求的線程模型。在請求被產生后,模型會與服務器一起創建事件,并通過請求線程,去處理其他的請求。

那么,響應式編程的具體流程是怎樣的呢?如下圖所示,一旦應用程序調用了從某個數據源獲取數據的操作,那么就會立即返回一個線程,并且讓來自該數據源的數據作為數據/事件流出現。在此,應用程序是訂閱者(subscriber),數據源是發布者(publisher)。一旦數據流完成后,onComplete事件就會被觸發。 

 

數據流工作流程

如下圖所示,如果發生了任何異常情況,發布者將會觸發onError事件。 

數據流工作流程

在某些情況下,例如:從數據庫中刪除一個條目,發布者只會立即觸發onComplete/onError事件,而不會調用onNext事件,畢竟沒有任何數據可以返回。 

數據流工作流程

下面,我們進一步討論:什么是背壓,以及如何將背壓應用于響應流。例如,我們有一個客戶端應用正在向另一個服務請求數據。該服務能夠以1000 TPS(吞吐量)的速率發布事件,而客戶端應用只能以200 TPS的速率處理事件。

那么在這種情況下,客戶端應用程序需要通過緩沖數據來進行處理。而在隨后的調用中,客戶端應用程序可能會緩沖更多的數據,以致最終耗盡內存。顯然,這對于那些依賴該客戶端應用的其他程序,會造成級聯效應。為了避免此類情況,客戶端應用可以要求服務在事件的末尾進行緩沖,并以客戶端應用的速率去推送各種事件。這就是所謂的背壓,具體流程請見下圖。 

背壓示例

下面,我們將介紹響應流的規范(請參見--https://www.reactive-streams.org/),以及一個實現案例--Project Reactor(請參見--https://projectreactor.io/)。通常,響應流的規范定義了如下接口類型:

  • 發布者(Publisher) → 發布者是那些具有無限數量順序元素的提供者。它可以按照訂閱者的要求進行發布。其Java代碼如下所示:  
  1. public interface Publisher<T> {    
  2.      public void subscribe(Subscriber<? super T> s); 
  3.  
  •  訂閱者(Subscriber) → 訂閱者恰好是那些具有無限數量順序元素的使用者。其Java代碼如下所示:  
  1. public interface Subscriber<T> { 
  2.     public void onSubscribe(Subscription s); 
  3.      public void onNext(T t); 
  4.      public void onError(Throwable t); 
  5.      public void onComplete(); 
  6.  
  •  訂閱(Subscription) → 表示訂閱者向發布者訂閱的某個一對一的周期。其Java代碼如下所示:
  1. public interface Subscription { 
  2.     public void request(long n); 
  3.     public void cancel(); 
  4. }
  •  處理器(Processor) → 表示一個處理階段,即訂閱者和發布者之間根據約定進行處理。

下面是響應流規范的類圖: 

響應流規范

其實,響應流規范具有許多種實現方式,上述Project Reactor只是其中的一種。Reactor可以完全實現無阻塞、且有效的請求管理。它能夠提供兩個響應式和可組合的API,即:Flux [N](請參見-- https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html)和Mono [0|1](請參見--https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html)。它們廣泛地實現了響應式擴展(Reactive Extensions)。ReactorHTTP(包括Websocket)提供了非阻塞的背壓式網絡引擎、TCPUDP。它也非常適合于微服務的架構。

  •  Flux→ 它是發布者帶有各種rx運算符的響應流(Reactive Streams),它會發出0N個元素,然后輸出成功、或帶有某個錯誤的完成結果。其流程圖如下所示: 

圖片來源:https://projectreactor.io

  •  Mono → 它也是發布者具有各種基本rx運算符的響應流,能夠通過發出01個元素,輸出成功、或帶有某個錯誤的完成結果。其流程圖如下所示: 

圖片來源:https://projectreactor.io

由于Reactor的實施往往涉及到Spring 5.x,因此,我們可以使用帶有Spring servlet棧的命令式編程,來構建REST API。下圖展示了Spring如何支持響應式和servlet棧的實現。 

 

圖片來源:spring.io

下面是一個公布了響應式REST API的應用。在該應用中,我們使用到了:

  •  帶有WebFluxSpring Boot
  •  具有響應式支持的Spring數據
  •  Cassandra數據庫

下圖是該應用的整體架構: 

下面是build.gradle文件的Groovy代碼,它包含了與Spring WebFlux協同使用的各種依賴項。

  1. plugins { 
  2.      id 'org.springframework.boot' version '2.2.6.RELEASE' 
  3.      id 'io.spring.dependency-management' version '1.0.9.RELEASE' 
  4.      id 'java' 
  5. group = 'org.smarttechie' 
  6. version = '0.0.1-SNAPSHOT' 
  7. sourceCompatibility = '1.8' 
  8. repositories { 
  9.     mavenCentral() 
  10. }  
  11. dependencies { 
  12.    implementation 'org.springframework.boot:spring-boot-starter-data-cassandra-reactive' 
  13.    implementation 'org.springframework.boot:spring-boot-starter-webflux' 
  14.    testImplementation('org.springframework.boot:spring-boot-starter-test') { 
  15.    exclude group'org.junit.vintage', module: 'junit-vintage-engine' 
  16.    } 
  17.    testImplementation 'io.projectreactor:reactor-test' 
  18.  } 
  19. test { 
  20.   useJUnitPlatform() 
  21.  

在此應用程序中,我公布了如下API。您可以通過GitHub的相關鏈接--https://github.com/2013techsmarts/Spring-Reactive-Examples,下載源代碼。  

在構建響應式API時,我們可以使用功能性樣式編程模型來構建API,而無需使用RestController。當然,您需要具有如下的routerhandler組件:

Router 

  1. package org.smarttechie.router; 
  2. import org.smarttechie.handler.ProductHandler; 
  3. import org.springframework.context.annotation.Bean; 
  4. import org.springframework.context.annotation.Configuration; 
  5. import org.springframework.http.MediaType; 
  6. import org.springframework.web.reactive.function.server.RouterFunction; 
  7. import org.springframework.web.reactive.function.server.RouterFunctions; 
  8. import org.springframework.web.reactive.function.server.ServerResponse; 
  9. import static org.springframework.web.reactive.function.server.RequestPredicates.*; 
  10. @Configuration 
  11. public class ProductRouter { 
  12.     /** 
  13.      * The router configuration for the product handler. 
  14.      * @param productHandler 
  15.      * @return 
  16.      */ 
  17.     @Bean 
  18. public RouterFunction<ServerResponse>    productsRoute(ProductHandler productHandler){ 
  19.     return RouterFunctions.route(GET("/products").and(accept(MediaType.APPLICATION_JSON)) ,productHandler::getAllProducts).andRoute(POST("/product").and(accept(MediaType.APPLICATION_JSON)),productHandler::createProduct).andRoute(DELETE("/product/{id}").and(accept(MediaType.APPLICATION_JSON)) ,productHandler::deleteProduct).andRoute(PUT("/product/{id}").and(accept(MediaType.APPLICATION_JSON)),productHandler::updateProduct); 
  20.  } 
  21. }

 Handler 

  1. package org.smarttechie.handler; 
  2.   import org.smarttechie.model.Product; 
  3.   import org.smarttechie.service.ProductService; 
  4.   import org.springframework.beans.factory.annotation.Autowired; 
  5.   import org.springframework.http.MediaType; 
  6.   import org.springframework.stereotype.Component;    
  7.   import org.springframework.web.reactive.function.server.ServerRequest; 
  8.    import org.springframework.web.reactive.function.server.ServerResponse; 
  9.   import reactor.core.publisher.Mono; 
  10.    import static org.springframework.web.reactive.function.BodyInserters.fromObject;     
  11.    @Component 
  12.    public class ProductHandler { 
  13.     @Autowired 
  14.     private ProductService productService; 
  15.      static Mono<ServerResponse> notFound = ServerResponse.notFound().build(); 
  16.    /** 
  17.      * The handler to get all the available products. 
  18.      * @param serverRequest 
  19.      * @return - all the products info as part of ServerResponse 
  20.      */ 
  21.     public Mono<ServerResponse> getAllProducts(ServerRequest serverRequest) { 
  22.          return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(productService.getAllProducts(), Product.class); 
  23.   } 
  24.  
  25.     /** 
  26.       * The handler to create a product 
  27.       * @param serverRequest 
  28.       * @return - return the created product as part of ServerResponse 
  29.      */ 
  30.     public Mono<ServerResponse> createProduct(ServerRequest serverRequest) { 
  31.         Mono<Product> productToSave = serverRequest.bodyToMono(Product.class); 
  32.         return productToSave.flatMap(product -> 
  33.                 ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(productService.save(product), Product.class));   
  34.  
  35.    }    
  36.  
  37.     /** 
  38.      * The handler to delete a product based on the product id.          
  39.      * @param serverRequest 
  40.      * @return - return the deleted product as part of ServerResponse 
  41.      */    
  42.     public Mono<ServerResponse> deleteProduct(ServerRequest serverRequest) { 
  43.         String id = serverRequest.pathVariable("id");  
  44.         Mono<Void> deleteItem = productService.deleteProduct(Integer.parseInt(id)); 
  45.          return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(deleteItem, Void.class);   
  46.    } 
  47.     /** 
  48.       * The handler to update a product. 
  49.       * @param serverRequest   
  50.       * @return - The updated product as part of ServerResponse 
  51.      */ 
  52.     public Mono<ServerResponse> updateProduct(ServerRequest serverRequest) { 
  53.       return productService.update(serverRequest.bodyToMono(Product.class)).flatMap(product ->ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(fromObject(product))) .switchIfEmpty(notFound);  
  54.     } 

至止,我們已經對如何公布響應式REST API有所了解。針對上述實現,我們使用了Gatling(譯者注:是一款功能強大的負載測試工具),在響應式API和非響應式API(使用Spring RestController構建非響應式API)上,進行了簡單的基準化測試。其結果比較如下圖所示。具體的Gatling負載測試腳本,請參考GitHub上的鏈接:https://github.com/2013techsmarts/Spring-Reactive-Examples 

負載測試結果比較 

原標題:Build Reactive REST APIs With Spring WebFlux ,作者:Siva Prasad Rao Janapati

【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2022-05-31 07:40:41

ArctypeFeather.jsSQLite

2023-05-11 12:40:00

Spring控制器HTTP

2025-03-28 09:33:11

2022-02-09 14:36:25

GoMongoDBFiber

2022-01-07 15:11:27

項目Go 框架

2023-09-21 11:20:46

2025-03-31 09:30:52

2022-07-04 09:15:10

Spring請求處理流程

2023-02-09 08:01:12

核心組件非阻塞

2023-09-04 11:52:53

SpringMVC性能

2023-12-06 07:13:16

RESTAPI客戶端

2023-04-18 15:18:10

2020-05-25 07:00:00

雙因素認證身份認證密碼

2024-10-15 09:34:57

2022-11-04 08:39:46

SpringWebFlux

2022-03-29 09:00:00

Angular框架REST API

2024-09-26 08:03:37

2023-10-18 15:55:14

REST APISpring MVC

2024-01-09 09:09:45

RESTGraphQL

2023-11-02 18:01:24

SpringMVC配置
點贊
收藏

51CTO技術棧公眾號

男人天堂中文字幕| 尤物国产在线观看| 亚洲aⅴ在线观看| 日日摸夜夜添夜夜添亚洲女人| 亚洲男人7777| 玩弄japan白嫩少妇hd| 在线免费观看黄色av| 高清不卡一区二区在线| 456国产精品| 亚洲色图27p| 精品无人区一区二区| 在线免费一区三区| 人妻激情另类乱人伦人妻| 日韩在线免费看| 激情欧美日韩一区二区| 91成人福利在线| 国产老头老太做爰视频| 日韩美女精品| 日韩欧美专区在线| 欧美久久久久久久久久久久久| 欧美一区二区三区| 2020国产精品自拍| 91传媒免费看| 最新中文字幕第一页| 亚洲激情午夜| 久久国产精品久久久| 无码一区二区三区在线| 久久99国产精品久久99大师| 欧美日韩高清一区二区不卡| 波多野结衣乳巨码无在线| 国精产品一区| 中文字幕二三区不卡| 精品欧美日韩| 亚洲乱码在线观看| 久99久精品视频免费观看| 国产成人精品免费视频| 国产福利拍拍拍| 午夜精彩国产免费不卡不顿大片| 中文字幕一区电影| 熟女俱乐部一区二区| 国产成人一二| 精品美女在线播放| 久久久久久国产精品日本| 国产91在线精品| 欧美在线观看18| 男人舔女人下面高潮视频| 夜鲁夜鲁夜鲁视频在线播放| 亚洲成人福利片| 日韩精品免费一区| av免费在线观| 一区二区三区鲁丝不卡| 天天干天天色天天爽| 日本www在线观看视频| 国产精品亲子伦对白| 亚洲精品美女久久7777777| 国内精品一区视频| 中文字幕乱码亚洲精品一区| 视频直播国产精品| 韩国无码一区二区三区精品| 国产精品久久久久av蜜臀| 精品美女一区二区| 久久精品女同亚洲女同13| 黄色欧美网站| 亚洲精品成人久久| 亚洲乱码国产乱码精品精大量| 欧美成人专区| 精品亚洲一区二区| 国产精品扒开腿做爽爽| 国产一区二区观看| 亚洲午夜久久久影院| 色屁屁草草影院ccyy.com| 日韩欧美精品一区| 美女av一区二区| 久青草视频在线观看| 亚洲日韩视频| 日本伊人精品一区二区三区介绍 | www.好吊色| 国产成人在线视频网站| 久久久久九九九| 都市激情一区| 亚洲精品免费在线| 少妇高潮毛片色欲ava片| 精品国产免费人成网站| 欧美日韩精品一区二区在线播放| 香蕉视频xxxx| 理论片一区二区在线| 一区二区三区亚洲| 欧美一区二区三区爽爽爽| 好吊一区二区三区| 国产激情综合五月久久| 国产绳艺sm调教室论坛| 成人国产精品免费网站| 国产婷婷精品av在线| 51国偷自产一区二区三区| 性一交一乱一精一晶| 91麻豆国产福利在线观看| 亚洲最新在线| 大菠萝精品导航| 欧美日韩国产色站一区二区三区| 国产精品偷伦视频免费观看了| 亚洲女娇小黑人粗硬| 欧美成人激情在线| 手机av免费观看| 国产成人aaa| 色综合电影网| 9765激情中文在线| 欧美精品在线一区二区三区| www.免费av| 亚洲精品国产成人影院| 日韩美女av在线免费观看| 国产黄色一区二区| 国产精品欧美一级免费| 成人免费aaa| 精品视频91| 国产亚洲精品久久久优势| 国产无遮挡aaa片爽爽| 美女视频免费一区| 欧美日韩精品久久| 久操av在线| 欧美一区永久视频免费观看| 国产精久久一区二区三区| 亚洲人成久久| 成人91视频| 欧美精品电影| 欧美亚洲免费在线一区| 一区二区三区少妇| 影音先锋中文字幕一区| 91在线|亚洲| 午夜视频在线看| 色婷婷激情一区二区三区| 国产免费一区二区三区最新6| 91精品国产91久久久久久密臀| 国产精品h片在线播放| 天天摸天天碰天天爽天天弄| 亚洲午夜羞羞片| 欧美国产在线一区| 亚洲一区二区| 国产日韩在线播放| 在线观看二区| 色婷婷综合五月| 精品人妻一区二区三区香蕉| 日韩一级不卡| 精品一卡二卡三卡四卡日本乱码| а√天堂8资源在线| 欧美精品一区二区三区一线天视频 | 免费极品av一视觉盛宴| 欧美久久一区二区三区| 久久天天躁狠狠躁老女人| 国产精品综合在线| 亚洲欧美激情插 | 99精品国产热久久91蜜凸| 999一区二区三区| 影音先锋欧美激情| 久久久久久网址| 男人天堂一区二区| 亚洲高清三级视频| bl动漫在线观看| 免费在线亚洲| 日本午夜精品电影| 成人综合网站| 精品国产依人香蕉在线精品| 国产美女www爽爽爽视频| 亚洲美女精品一区| 中文字幕天堂av| 国产日韩欧美一区在线| 欧洲高清一区二区| 日韩三级成人| 欧美老肥婆性猛交视频| 天天操天天插天天射| 一本久道久久综合中文字幕 | 日韩国产欧美| 91精品中国老女人| 久久免费电影| 国产午夜精品全部视频播放| 一区二区三区黄色片| 亚洲美女免费视频| 亚洲欧美视频在线播放| 日韩一区精品视频| 一本二本三本亚洲码| 国产精品99久久免费观看| 国产高清视频一区三区| 黄页视频在线播放| 欧美精品一区二区三区在线播放 | 欧美一区三区二区在线观看| 国产黄色精品| 欧美精品videosex极品1| 男女污污视频在线观看| 337p亚洲精品色噜噜狠狠| 国产乡下妇女做爰视频| 国产欧美日韩久久| 91人人澡人人爽| 日韩精品亚洲专区| 免费的av在线| 国产欧美日韩精品一区二区免费| 91精品在线影院| 第84页国产精品| 欧美精品在线第一页| 男人的天堂在线免费视频| 日韩欧美一级精品久久| 欧美人一级淫片a免费播放| 亚洲综合色噜噜狠狠| 精品人妻一区二区三区蜜桃视频| 国产成a人亚洲精| 日本888xxxx| 亚洲精品偷拍| 一级黄色录像免费看| 最新国产精品视频| 丁香婷婷久久久综合精品国产 | 在线观看国产精品网站| 久久精品www| 国产精品国产三级国产aⅴ原创| 理论片大全免费理伦片| 精品一区二区在线视频| 无码人妻丰满熟妇区毛片18| 国产精品v日韩精品v欧美精品网站| 视频一区国产精品| 亚洲精品中文字幕99999| 亚洲综合日韩在线| 欧美美女福利视频| 国产99在线|中文| 国产va在线视频| 欧美片一区二区三区| 麻豆系列在线观看| 亚洲午夜女主播在线直播| 人成在线免费视频| 亚洲国产欧美自拍| 亚洲av无码乱码在线观看性色| 欧美日韩视频不卡| 性高潮视频在线观看| 色综合天天综合色综合av| 日本少妇全体裸体洗澡| 亚洲激情图片qvod| 欧美另类视频在线观看| 亚洲另类春色国产| 午夜少妇久久久久久久久| 国产精品久久久久久久久久久免费看| 精品国产av无码| 久久久久久久久免费| 国产偷人妻精品一区| 99精品视频免费在线观看| 欧美深性狂猛ⅹxxx深喉| www.亚洲免费av| 熟妇人妻久久中文字幕| av一区二区三区黑人| 91黄色免费视频| 99re在线精品| 一区二区三区免费在线观看视频 | 亚洲怡红院在线观看| 国产精品丝袜久久久久久app| 影音先锋男人在线| 国产精品五月天| 四虎地址8848| 亚洲精品欧美激情| 久久综合久久鬼| 欧美性猛xxx| 日韩免费av网站| 欧美日韩免费观看一区二区三区 | 中文字幕一区二区三区最新| 五月婷婷六月综合| 中文字幕色呦呦| 狠狠入ady亚洲精品| 欧美中日韩在线| 亚洲国产一区二区精品专区| 日本少妇高潮喷水视频| 日韩在线观看一区二区| 精品国产鲁一鲁一区二区三区| 国产麻豆精品在线| 美女又爽又黄免费| 国产清纯白嫩初高生在线观看91 | 毛片在线导航| 欧洲亚洲女同hd| 黑人一区二区三区| 99久久伊人精品影院| 另类ts人妖一区二区三区| 日本三级中国三级99人妇网站| 国产精品久久久久蜜臀| 免费看欧美黑人毛片| 天堂午夜影视日韩欧美一区二区| www.精品在线| 粉嫩蜜臀av国产精品网站| 亚洲av片不卡无码久久| 最新日韩在线视频| 国产第一页在线播放| 欧美最新大片在线看| 国产日韩欧美视频在线观看| 亚洲国模精品一区| 91最新在线| 性色av一区二区三区| 日韩一级二级| 国产成人看片| 日韩一区二区在线免费| 免费特级黄色片| 男人的j进女人的j一区| 国产女主播在线播放| 欧美激情综合五月色丁香| 久久久国产精华液| 欧美午夜精品一区二区蜜桃| 午夜精品在线播放| 在线精品国产欧美| av影片在线| 91久久久久久久久久久久久| 午夜精品影视国产一区在线麻豆| 中文字幕一区二区三区四区五区人 | 中文字幕第一区| 国产特黄大片aaaa毛片| 欧美色网站导航| 日韩精品视频无播放器在线看 | 日韩精品视频免费| 国产黄大片在线观看画质优化| 日韩美女视频在线观看| 成人自拍在线| 亚洲色图都市激情| 日韩avvvv在线播放| 熟妇高潮精品一区二区三区| 亚洲黄一区二区三区| 亚洲系列在线观看| 亚洲男人天堂手机在线| 国产高清视频色在线www| 92裸体在线视频网站| 成人毛片免费看| 免费激情视频在线观看| 97精品久久久午夜一区二区三区| 久久久久97国产| 777精品伊人久久久久大香线蕉| 国外av在线| 日韩免费在线视频| 天天躁日日躁狠狠躁欧美| 全黄性性激高免费视频| 国产精品一二三区在线| www.超碰在线观看| 欧美精品18+| 日本高清视频在线播放| 国产精品自拍网| 日韩啪啪电影网| 成人3d动漫一区二区三区| 久久中文字幕电影| 亚洲精品中文字幕乱码三区91| 日韩av影片在线观看| 操喷在线视频| 国产综合第一页| 国产欧美日韩亚洲一区二区三区| 国产原创剧情av| 亚洲h动漫在线| 涩爱av在线播放一区二区| 51色欧美片视频在线观看| 妖精视频一区二区三区| 日批视频在线免费看| 国产亚洲成av人在线观看导航| 亚洲中文一区二区| 中文字幕国产精品久久| 久久av日韩| 日本精品免费视频| 国产成人啪午夜精品网站男同| 久久免费少妇高潮99精品| 精品国产91久久久久久久妲己| 黄色在线观看www| 免费国产一区二区| 免费人成黄页网站在线一区二区 | 免费成人av电影| 国产精品露脸自拍| 婷婷激情综合| 韩国av中国字幕| 一本久道久久综合中文字幕| 超碰国产在线观看| 91人成网站www| 影音先锋中文字幕一区| 18禁裸乳无遮挡啪啪无码免费| 欧美在线制服丝袜| a天堂中文在线官网在线| 国产精品自拍首页| 久久国产精品久久w女人spa| 91社区视频在线观看| 日韩一级黄色大片| 免费看男女www网站入口在线| 欧美午夜免费| 国内久久精品视频| 久久精品视频9| 一区二区av在线| 亚洲精品a区| 久久久久久久久久福利| 亚洲丝袜另类动漫二区| 欧美熟女一区二区| 国产精品白丝jk喷水视频一区| 91精品国产91久久综合| 久久偷拍免费视频| 欧美一区二区网站| 原纱央莉成人av片| 手机看片日韩国产| 久久综合资源网| 国产精品永久久久久久久久久| 97婷婷涩涩精品一区| 日韩在线观看| 精品人妻一区二区免费视频| 欧美人动与zoxxxx乱| f2c人成在线观看免费视频| 亚洲午夜久久久影院伊人| 成人18精品视频| 国产麻豆一精品一男同| 国产va免费精品高清在线| 亚洲无毛电影|