精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

久久不见久久见中文字幕免费| melody高清在线观看| 欧美韩日精品| 日韩av在线电影网| 欧美性猛交久久久乱大交小说| 蜜桃视频在线观看网站| 亚洲美女性生活| 国产精品xnxxcom| 午夜精品久久久久久久| 日韩在线国产| 亚洲精品久久久久久无码色欲四季 | 欧美日韩极品在线观看一区| 成人污网站在线观看| 亚洲aaa在线观看| 久久丁香综合五月国产三级网站| 欧美高清视频在线播放| 日韩精品最新在线观看| 啊啊啊国产视频| av片在线看| 成人国产在线观看| 国产精品精品视频| 久久综合亚洲色hezyo国产| 国产在视频线精品视频www666| 日韩手机在线导航| xx欧美撒尿嘘撒尿xx| wwww亚洲| 亚洲婷婷综合色高清在线| 国产尤物99| 国产日韩一级片| 亚洲婷婷在线| zzjj国产精品一区二区| 噜噜噜在线视频| 精品视频一区二区三区| 欧美在线观看视频一区二区三区| 国产精品va在线观看无码| 最近高清中文在线字幕在线观看| 成人99免费视频| 国产成人精品亚洲午夜麻豆| 精品免费视频一区二区| 中文字幕永久有效| 欧美大片免费| 五月天丁香久久| 欧美日韩午夜爽爽| 欧美尤物美女在线| 欧美激情中文字幕| 蜜桃传媒视频麻豆第一区免费观看 | 国产精品无码永久免费不卡| 51亚洲精品| 7777精品伊人久久久大香线蕉的 | 日韩亚洲视频| 日本天堂影院在线视频| www.av亚洲| 国产精品v欧美精品v日韩| 国产av一区二区三区精品| 奇米精品一区二区三区在线观看一| 992tv成人免费影院| 久久久久国产精品夜夜夜夜夜| 亚洲乱码精品| 日韩在线观看成人| 波多野结衣家庭教师在线观看| 亚洲桃色综合影院| 亚洲乱码一区二区| 女~淫辱の触手3d动漫| 丝袜连裤袜欧美激情日韩| 亚洲成**性毛茸茸| 男男一级淫片免费播放| 久久狠狠久久| 亚洲精品国产精品久久清纯直播| 日韩综合第一页| 成人高潮a毛片免费观看网站| 精品日韩一区二区三区免费视频| 欧美日韩一区二区区| 婷婷视频一区二区三区| 欧美tk—视频vk| 亚洲美女高潮久久久| 国产主播性色av福利精品一区| 亚洲а∨天堂久久精品喷水| 粉嫩av懂色av蜜臀av分享| 日韩理论电影中文字幕| 亚洲天堂av高清| 91麻豆精品国产91久久综合| 欧美电影免费播放| 色综合久久久888| 五月天婷婷丁香| 美女国产一区| 国产精品一区久久| 99热这里只有精品9| 大桥未久av一区二区三区中文| 韩国成人动漫在线观看| 精品电影在线| 亚洲欧美视频在线观看视频| 91免费黄视频| 国产成人精品一区二三区在线观看 | 狠狠色丁香婷综合久久| 97人人干人人| 天天干天天插天天操| 国产日韩精品一区二区浪潮av| 亚洲欧美日韩在线综合| 青春草视频在线观看| 欧美日韩在线观看视频| 一区二区三区 欧美| 日韩高清在线观看一区二区| 亚洲国产一区二区三区四区| 91在线无精精品白丝| 欧美一区二区三区另类| 91av视频在线观看| 91高潮大合集爽到抽搐| av亚洲精华国产精华精华| 亚洲精品中文综合第一页| 欧美色图天堂| 蜜乳av综合| 这里只有精品视频在线| 久久久一区二区三区四区| 欧美亚洲在线| 91gao视频| 国产黄在线观看| 亚洲一区中文日韩| 国产一区二区在线免费播放| 丁香5月婷婷久久| 色黄久久久久久| 国产精品777777| 国产激情一区二区三区| 神马影院我不卡| 国内小视频在线看| 91精品在线免费观看| 女~淫辱の触手3d动漫| 今天的高清视频免费播放成人| 国产精品视频成人| 91性高潮久久久久久久| 亚洲精品白浆| 欧美日韩国产天堂| 美女洗澡无遮挡| 亚洲精一区二区三区| 成人精品一区二区三区电影免费| 国产一级在线| 午夜精品久久久久久久久久久| 日本高清一区二区视频| 精品高清在线| 日韩av成人在线观看| 人妻无码一区二区三区久久99| 国产精品久久久一区麻豆最新章节| 男女高潮又爽又黄又无遮挡| gogo久久日韩裸体艺术| 欧美成人h版在线观看| 亚洲一区二区视频在线播放| 久久久国产午夜精品| 国产免费黄视频| 91中文字幕在线播放| 日韩电影在线视频| 欧洲亚洲在线视频| 午夜成人鲁丝片午夜精品| 亚洲一区二区三区视频在线| 亚洲av无一区二区三区久久| 亚洲五月综合| 91香蕉电影院| 2020国产在线视频| 91精品国产综合久久久久久漫画| 天天操夜夜操av| 久久99热狠狠色一区二区| 亚洲高清在线播放| 国产精品videossex撒尿| 国产亚洲一级高清| 中文字幕人妻色偷偷久久| 亚洲国产精品99久久久久久久久| 中文字幕无码不卡免费视频| 久久超碰99| 国产精品久久久| 欧美又黄又嫩大片a级| 九九久久婷婷| 国产精品igao视频| 97在线观看免费观看高清| 精品视频一区 二区 三区| 亚洲色图欧美色| 久久电影国产免费久久电影| 在线观看视频黄色| 深夜福利一区二区三区| 久久久久久久久久久国产| 手机看片一区二区三区| 欧美丝袜第一区| 精品日韩在线视频| 国产一区福利在线| 精品成在人线av无码免费看| 日本亚洲不卡| 国产精品久久久久久久久久东京 | 日韩av手机在线观看| 中文字幕日本最新乱码视频| 哺乳挤奶一区二区三区免费看| 亚洲91精品在线| 精品视频三区| 91精品在线免费| 日本学生初尝黑人巨免费视频| 久久久精品中文字幕麻豆发布| 婷婷丁香激情网| 中国一级片在线观看| 丰满的护士2在线观看高清| 亚洲国产精品热久久| 国产一级淫片a视频免费观看| 国产精品美女久久久久久久网站| 一级黄色免费毛片| 一区二区日本视频| 亚洲精品久久久久久一区二区| 亚洲2区在线| 日韩av免费看网站| 18加网站在线| 亚洲天堂av女优| 成人乱色短篇合集| 免费av在线网址| 日韩精品一区二区三区第95| 91麻豆视频在线观看| 五月婷婷激情综合网| 国产精品久久久免费看| 99riav一区二区三区| 天天干天天色天天干| 久久久成人网| 成年女人18级毛片毛片免费| 欧美精品乱码| 九九热久久66| 精品久久久久久久久久岛国gif| 2019av中文字幕| 国产精品刘玥久久一区| 亚洲欧美日韩爽爽影院| www.黄色小说.com| 欧美色爱综合网| 日本道在线观看| 一区二区三区欧美| 精品人妻中文无码av在线| 黄色免费在线网站| 亚洲综合一二区| 中文乱码字幕高清一区二区| 久久亚洲免费视频| 久久久高清视频| 国产在线播放一区| 777视频在线| 欧美在线综合| 成人在线免费观看av| 亚洲午夜在线| 玖玖精品在线视频| 欧美超碰在线| 亚洲成人蜜桃| 国产欧美日韩精品一区二区三区| 国产精品一区二| 午夜日韩影院| 亚洲一区二区三区xxx视频| 久久久久久久性潮| 国产精品久久久久久亚洲影视| 澳门成人av网| 97在线视频一区| 免费一二一二在线视频| 欧美国产日韩一二三区| 欧美国产在线一区| 国产伦理精品不卡| 中文字幕12页| 国产尤物一区二区| 久久精品一二三四| 国产精品99久久久| 韩国一区二区三区四区| 国产精品一二三四| 中文字幕在线播放一区二区| 国产精品一品二品| 少妇欧美激情一区二区三区| 国产成人福利片| 无码国产精品一区二区免费式直播| 国产不卡免费视频| 久久久久成人精品无码中文字幕| 成人免费视频国产在线观看| 中文字幕一区二区人妻电影丶| 成人激情黄色小说| 女尊高h男高潮呻吟| 国产亚洲一本大道中文在线| 在线视频第一页| 中文字幕亚洲在| 欧美精品18videos性欧美| 成人福利在线| 久久最新资源网| 19禁羞羞电影院在线观看| 欧美性做爰毛片| 欧美日韩国产网站| 92裸体在线视频网站| av成人资源| 免费看成人av| 手机在线电影一区| 少妇久久久久久被弄到高潮| 亚洲日本国产| 五月婷婷深爱五月| 国产精一区二区三区| 制服丝袜第一页在线观看| 久久精品欧美一区二区三区麻豆| 国产小视频你懂的| 亚洲一区在线观看视频| 91玉足脚交嫩脚丫在线播放| 欧美日韩你懂得| 成人免费视频国产免费麻豆| 亚洲欧洲视频在线| www免费视频观看在线| 丰满岳妇乱一区二区三区| 国产精品久久中文字幕| 国产一区二区三区四区老人| 国产乱子伦农村叉叉叉| 老司机精品视频一区二区三区| 三大队在线观看| 国产三级一区二区| 久久精品一区二区三| 在线亚洲人成电影网站色www| 99在线无码精品入口| 亚洲美女视频网站| a毛片在线看免费观看| 日本在线观看天堂男亚洲| 蜜桃在线一区| 日韩免费av电影| 亚洲国产婷婷| 国产成人美女视频| 91免费视频大全| 看片网站在线观看| 欧美图区在线视频| 午夜18视频在线观看| 欧美片一区二区三区| av成人在线观看| 麻豆蜜桃91| 欧美婷婷在线| 国模私拍视频一区| 人成网站在线观看| 色琪琪综合男人的天堂aⅴ视频| h片在线观看下载| 91久久久在线| 日韩激情图片| 国产a级一级片| 丁香激情综合五月| 久久久久久久久久久久久女过产乱| 欧美主播一区二区三区| 日本成人一区二区三区| 久久久久久久网站| 欧美三级一区| 精品91一区二区三区| 日产欧产美韩系列久久99| 91av在线免费| 亚洲电影一区二区| 成人免费一级视频| 久久999免费视频| 国产电影一区二区| 致1999电视剧免费观看策驰影院| 日韩中文字幕不卡| 国产一二三四五区| 色香色香欲天天天影视综合网| 四虎永久在线观看| 久久人人爽人人爽人人片av高请| 欧美熟妇乱码在线一区| 欧美绝品在线观看成人午夜影视| 国产在线视频资源| 国产suv精品一区二区| 中文字幕亚洲影视| 成人性做爰aaa片免费看不忠| 久久综合九色综合97婷婷女人| 91视频免费网址| 亚洲乱码av中文一区二区| 都市激情亚洲一区| 日韩精品一线二线三线| 美女一区二区三区在线观看| 貂蝉被到爽流白浆在线观看| 欧美在线|欧美| 日本福利专区在线观看| 国产一区二区色| 亚洲精品久久久| 国产精品日日摸夜夜爽| 亚洲乱码中文字幕综合| 成人免费观看在线视频| 91福利视频网| 精品久久不卡| www.这里只有精品| 亚洲日本电影在线| 成人免费一级视频| 2019中文字幕在线免费观看| 国产成人1区| 中文字幕亚洲欧洲| 亚洲性色视频| 精品国产乱码久久久久久88av| 国产精品jizz在线观看美国| www国产视频| 在线日韩一区二区| 久久精品视频免费看| 亚洲自拍小视频免费观看| 亚洲二区在线| 国产成人一区二区在线观看| 69久久99精品久久久久婷婷| 不卡av免费观看| 少妇特黄a一区二区三区| 国产乱码精品一区二区三区av| 国产 日韩 欧美 成人| 亚洲免费精彩视频| 91麻豆精品国产综合久久久 | 成年人视频免费在线观看| 91精品免费看| 日韩视频一区| 久久久久麻豆v国产| 亚洲第一黄色网| 久久久精品一区二区毛片免费看| 人人妻人人做人人爽| 中文字幕免费在线观看视频一区| 老牛影视av牛牛影视av| 国产精品pans私拍| 欧美黄在线观看|