久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

《Node.js设计模式》高级异步准则

發布時間:2025/3/21 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Node.js设计模式》高级异步准则 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本系列文章為《Node.js Design Patterns Second Edition》的原文翻譯和讀書筆記,在GitHub連載更新,同步翻譯版鏈接。

歡迎關注我的專欄,之后的博文將在專欄同步:

  • Encounter的掘金專欄
  • 知乎專欄 Encounter的編程思考
  • segmentfault專欄 前端小站

Advanced Asynchronous Recipes

幾乎所有我們迄今為止看到的設計模式都可以被認為是通用的,并且適用于應用程序的許多不同的領域。但是,有一套更具體的模式,專注于解決明確的問題。我們可以調用這些模式。就像現實生活中的烹飪一樣,我們有一套明確的步驟來實現預期的結果。當然,這并不意味著我們不能用一些創意來定制設計模式,以配合我們的客人的口味,對于書寫Node.js程序來說是必要的。在本章中,我們將提供一些常見的解決方案來解決我們在日常Node.js開發中遇到的一些具體問題。這些模式包括以下內容:

  • 異步引入模塊并初始化
  • 在高并發的應用程序中使用批處理和緩存異步操作的性能優化
  • 運行與Node.js處理并發請求的能力相悖的阻塞事件循環的同步CPU綁定操作

異步引入模塊并初始化

在Chapter2-Node.js Essential Patterns中,當我們討論Node.js模塊系統的基本屬性時,我們提到了require()是同步的,并且module.exports也不能異步設置。

這是在核心模塊和許多npm包中存在同步API的主要原因之一,是否同步加載會被作為一個option參數被提供,主要用于初始化任務,而不是替代異步API。

不幸的是,這并不總是可能的。同步API可能并不總是可用的,特別是對于在初始化階段使用網絡的組件,例如執行三次握手協議或在網絡中檢索配置參數。 許多數據庫驅動程序和消息隊列等中間件系統的客戶端都是如此。

廣泛適用的解決方案

我們舉一個例子:一個名為db的模塊,它將會連接到遠程數據庫。 只有在連接和與服務器的握手完成之后,db模塊才能夠接受請求。在這種情況下,我們通常有兩種選擇:

  • 在開始使用之前確保模塊已經初始化,否則則等待其初始化。每當我們想要在異步模塊上調用一個操作時,都必須完成這個過程:
const db = require('aDb'); //The async module module.exports = function findAll(type, callback) {if (db.connected) { //is it initialized?runFind();} else {db.once('connected', runFind);}function runFind() {db.findAll(type, callback);}; };
  • 使用依賴注入(Dependency Injection)而不是直接引入異步模塊。通過這樣做,我們可以延遲一些模塊的初始化,直到它們的異步依賴被完全初始化。 這種技術將管理模塊初始化的復雜性轉移到另一個組件,通常是它的父模塊。 在下面的例子中,這個組件是app.js:
// 模塊app.js const db = require('aDb'); // aDb是一個異步模塊 const findAllFactory = require('./findAll'); db.on('connected', function() {const findAll = findAllFactory(db);// 之后再執行異步操作 });// 模塊findAll.js module.exports = db => {//db 在這里被初始化return function findAll(type, callback) {db.findAll(type, callback);} }

我們可以看出,如果所涉及的異步依賴的數量過多,第一種方案便不太適用了。

另外,使用DI有時也是不理想的,正如我們在Chapter7-Wiring Modules中看到的那樣。在大型項目中,它可能很快變得過于復雜,尤其對于手動完成并使用異步初始化模塊的情況下。如果我們使用一個設計用于支持異步初始化模塊的DI容器,這些問題將會得到緩解。

但是,我們將會看到,還有第三種方案可以讓我們輕松地將模塊從其依賴關系的初始化狀態中分離出來。

預初始化隊列

將模塊與依賴項的初始化狀態分離的簡單模式涉及到使用隊列和命令模式。這個想法是保存一個模塊在尚未初始化的時候接收到的所有操作,然后在所有初始化步驟完成后立即執行這些操作。

實現一個異步初始化的模塊

為了演示這個簡單而有效的技術,我們來構建一個應用程序。首先創建一個名為asyncModule.js的異步初始化模塊:

const asyncModule = module.exports;asyncModule.initialized = false; asyncModule.initialize = callback => {setTimeout(() => {asyncModule.initialized = true;callback();}, 10000); };asyncModule.tellMeSomething = callback => {process.nextTick(() => {if(!asyncModule.initialized) {return callback(new Error('I don\'t have anything to say right now'));}callback(null, 'Current time is: ' + new Date());}); };

在上面的代碼中,asyncModule展現了一個異步初始化模塊的設計模式。 它有一個initialize()方法,在10秒的延遲后,將初始化的flag變量設置為true,并通知它的回調調用(10秒對于真實應用程序來說是很長的一段時間了,但是對于具有互斥條件的應用來說可能會顯得力不從心)。

另一個方法tellMeSomething()返回當前的時間,但是如果模塊還沒有初始化,它拋出產生一個異常。
下一步是根據我們剛剛創建的服務創建另一個模塊。 我們設計一個簡單的HTTP請求處理程序,在一個名為routes.js的文件中實現:

const asyncModule = require('./asyncModule');module.exports.say = (req, res) => {asyncModule.tellMeSomething((err, something) => {if(err) {res.writeHead(500);return res.end('Error:' + err.message);}res.writeHead(200);res.end('I say: ' + something);}); };

在handler中調用asyncModule的tellMeSomething()方法,然后將其結果寫入HTTP響應中。 正如我們所看到的那樣,我們沒有對asyncModule的初始化狀態進行任何檢查,這可能會導致問題。

現在,創建app.js模塊,使用核心http模塊創建一個非常基本的HTTP服務器:

const http = require('http'); const routes = require('./routes'); const asyncModule = require('./asyncModule');asyncModule.initialize(() => {console.log('Async module initialized'); });http.createServer((req, res) => {if (req.method === 'GET' && req.url === '/say') {return routes.say(req, res);}res.writeHead(404);res.end('Not found'); }).listen(8000, () => console.log('Started'));

上述模塊是我們應用程序的入口點,它所做的只是觸發asyncModule的初始化并創建一個HTTP服務器,它使用我們以前創建的handler(routes.say())來對網絡請求作出相應。

我們現在可以像往常一樣通過執行app.js模塊來嘗試啟動我們的服務器。

在服務器啟動后,我們可以嘗試使用瀏覽器訪問URL:http://localhost:8000/并查看從asyncModule返回的內容。
和預期的一樣,如果我們在服務器啟動后立即發送請求,結果將是一個錯誤,如下所示:

Error:I don't have anything to say right now

顯然,在異步模塊加載好了之后:

這意味著asyncModule尚未初始化,但我們仍嘗試使用它,則會拋出一個錯誤。

根據異步初始化模塊的實現細節,幸運的情況是我們可能會收到一個錯誤,乃至丟失重要的信息,崩潰整個應用程序。 總的來說,我們剛剛描述的情況總是必須要避免的。

大多數時候,可能并不會出現上述問題,畢竟初始化一般來說很快,以至于在實踐中,它永遠不會發生。 然而,對于設計用于自動調節的高負載應用和云服務器,情況就完全不同了。

用預初始化隊列包裝模塊

為了維護服務器的健壯性,我們現在要通過使用我們在本節開頭描述的模式來進行異步模塊加載。我們將在asyncModule尚未初始化的這段時間內對所有調用的操作推入一個預初始化隊列,然后在異步模塊加載好后處理它們時立即刷新隊列。這就是狀態模式的一個很好的應用!我們將需要兩個狀態,一個在模塊尚未初始化的時候將所有操作排隊,另一個在初始化完成時將每個方法簡單地委托給原始的asyncModule模塊。

通常,我們沒有機會修改異步模塊的代碼;所以,為了添加我們的排隊層,我們需要圍繞原始的asyncModule模塊創建一個代理。

接下來創建一個名為asyncModuleWrapper.js的新文件,讓我們依照每個步驟逐個構建它。我們需要做的第一件事是創建一個代理,并將原始異步模塊的操作委托給這個代理:

const asyncModule = require('./asyncModule'); const asyncModuleWrapper = module.exports; asyncModuleWrapper.initialized = false; asyncModuleWrapper.initialize = () => {activeState.initialize.apply(activeState, arguments); }; asyncModuleWrapper.tellMeSomething = () => {activeState.tellMeSomething.apply(activeState, arguments); };

在前面的代碼中,asyncModuleWrapper將其每個方法簡單地委托給activeState。 讓我們來看看這兩個狀態是什么樣子

從notInitializedState開始,notInitializedState是指還沒初始化的狀態:

// 當模塊沒有被初始化時的狀態 let pending = []; let notInitializedState = {initialize: function(callback) {asyncModule.initialize(function() {asyncModuleWrapper.initalized = true;activeState = initializedState;pending.forEach(function(req) {asyncModule[req.method].apply(null, req.args);});pending = [];callback();});},tellMeSomething: function(callback) {return pending.push({method: 'tellMeSomething',args: arguments});}};

當initialize()方法被調用時,我們觸發初始化asyncModule模塊,提供一個回調函數作為參數。 這使我們的asyncModuleWrapper知道什么時候原始模塊被初始化,在初始化后執行預初始化隊列的操作,之后清空預初始化隊列,再調用作為參數的回調函數,以下為具體步驟:

  • 把initializedState賦值給activeState,表示預初始化已經完成了。
  • 執行先前存儲在待處理隊列中的所有命令。
  • 調用原始回調。
  • 由于此時的模塊尚未初始化,此狀態的tellMeSomething()方法僅創建一個新的Command對象,并將其添加到預初始化隊列中。

    此時,當原始的asyncModule模塊尚未初始化時,代理應該已經清楚,我們的代理將簡單地把所有接收到的請求防到預初始化隊列中。 然后,當我們被通知初始化完成時,我們執行所有預初始化隊列的操作,然后將內部狀態切換到initializedState。來看這個代理模塊最后的定義:

    let initializedState = asyncModule;

    不出意外,initializedState對象只是對原始的asyncModule的引用!事實上,初始化完成后,我們可以安全地將任何請求直接發送到原始模塊。

    最后,設定異步模塊還沒加載好的的狀態,即notInitializedState

    let activeState = notInitializedState;

    我們現在可以嘗試再次啟動我們的測試服務器,但首先,我們不要忘記用我們新的asyncModuleWrapper對象替換原始的asyncModule模塊的引用; 這必須在app.js和routes.js模塊中完成。

    這樣做之后,如果我們試圖再次向服務器發送一個請求,我們會看到在asyncModule模塊尚未初始化的時候,請求不會失敗; 相反,他們會掛起,直到初始化完成,然后才會被實際執行。我們當然可以肯定,比起之前,容錯率變得更高了。

    可以看到,在剛剛初始化異步模塊的時候,服務器會等待請求的響應:

    在異步模塊加載完成后,服務器才會返回響應的信息:

    模式:如果模塊是需要異步初始化的,則對每個操作進行排隊,直到模塊完全初始化釋放隊列。

    現在,我們的服務器可以在啟動后立即開始接受請求,并保證這些請求都不會由于其模塊的初始化狀態而失敗。我們能夠在不使用DI的情況下獲得這個結果,也不需要冗長且容易出錯的檢查來驗證異步模塊的狀態。

    其它場景的應用

    我們剛剛介紹的模式被許多數據庫驅動程序和ORM庫所使用。 最值得注意的是Mongoose,它是MongoDB的ORM。使用Mongoose,不必等待數據庫連接打開,以便能夠發送查詢,因為每個操作都排隊,稍后與數據庫的連接完全建立時執行。 這顯然提高了其API的可用性。

    看一下Mongoose的源碼,它的每個方法是如何通過代理添加預初始化隊列。 可以看看實現這中模式的代碼片段:https://github.com/Automattic... for (var i in Collection.prototype) {(function(i){NativeCollection.prototype[i] = function () {if (this.buffer) {// mongoose中,在緩沖區不為空時,只是簡單地把這個操作加入緩沖區內this.addQueue(i, arguments);return;}var collection = this.collection, args = arguments, self = this, debug = self.conn.base.options.debug;if (debug) {if ('function' === typeof debug) {debug.apply(debug, [self.name, i].concat(utils.args(args, 0, args.length-1)));} else {console.error('\x1B[0;36mMongoose:\x1B[0m %s.%s(%s) %s %s %s', self.name, i, print(args[0]), print(args[1]), print(args[2]), print(args[3]))}}return collection[i].apply(collection, args);};})(i); }

    異步批處理和緩存

    在高負載的應用程序中,緩存起著至關重要的作用,幾乎在網絡中的任何地方,從網頁,圖像和樣式表等靜態資源到純數據(如數據庫查詢的結果)都會使用緩存。 在本節中,我們將學習如何將緩存應用于異步操作,以及如何充分利用緩存解決高請求吞吐量的問題。

    實現沒有緩存或批處理的服務器

    在這之前,我們來實現一個小型的服務器,以便用它來衡量緩存和批處理等技術在解決高負載應用程序的優勢。

    讓我們考慮一個管理電子商務公司銷售的web服務器,特別是對于查詢我們的服務器所有特定類型的商品交易的總和的情況。 為此,考慮到LevelUP的簡單性和靈活性,我們將再次使用LevelUP。我們要使用的數據模型是存儲在sales這一個sublevel中的簡單事務列表,它是以下的形式:

    transactionId {amount, item}

    key由transactionId表示,value則是一個JSON對象,它包含amount,表示銷售金額和item,表示項目類型。
    要處理的數據是非常基本的,所以讓我們立即在名為的totalSales.js文件中實現API,將如下所示:

    const level = require('level'); const sublevel = require('level-sublevel');const db = sublevel(level('example-db', {valueEncoding: 'json'})); const salesDb = db.sublevel('sales');module.exports = function totalSales(item, callback) {console.log('totalSales() invoked');let sum = 0;salesDb.createValueStream() // [1].on('data', data => {if(!item || data.item === item) { // [2]sum += data.amount;}}).on('end', () => {callback(null, sum); // [3]}); };

    該模塊的核心是totalSales函數,它也是唯一exports的API;它進行如下工作:

  • 我們從包含交易信息的salesDb的sublevel創建一個Stream。Stream將從數據庫中提取所有條目。
  • 監聽data事件,這個事件觸發時,將從數據庫Stream中提取出每一項,如果這一項的item參數正是我們需要的item,就去累加它的amount到總的sum里面。
  • 最后,end事件觸發時,我們最終調用callback()方法。
  • 上述查詢方式可能在性能方面并不好。理想情況下,在實際的應用程序中,我們可以使用索引,甚至使用增量映射來縮短實時計算的時間;但是,由于我們需要體現緩存的優勢,對于上述例子來說,慢速的查詢實際上更好,因為它會突出顯示我們要分析的模式的優點。

    為了完成總銷售應用程序,我們只需要從HTTP服務器公開totalSales的API;所以,下一步是構建一個(app.js文件):

    const http = require('http'); const url = require('url'); const totalSales = require('./totalSales');http.createServer((req, res) => {const query = url.parse(req.url, true).query;totalSales(query.item, (err, sum) => {res.writeHead(200);res.end(`Total sales for item ${query.item} is ${sum}`);}); }).listen(8000, () => console.log('Started'));

    我們創建的服務器是非常簡單的;我們只需要它暴露totalSales API。
    在我們第一次啟動服務器之前,我們需要用一些示例數據填充數據庫;我們可以使用專用于本節的代碼示例中的populate_db.js腳本來執行此操作。該腳本將在數據庫中創建100K個隨機銷售交易。
    好的! 現在,一切都準備好了。 像往常一樣,啟動服務器,我們執行以下命令:

    node app

    請求這個HTTP接口,訪問至以下URL:

    http://localhost:8000/?item=book

    但是,為了更好地了解服務器的性能,我們需要連續發送多個請求;所以,我們創建一個名為loadTest.js的腳本,它以200 ms的間隔發送請求。它已經被配置為連接到服務器的URL,因此,要運行它,執行以下命令:

    node loadTest

    我們會看到這20個請求需要一段時間才能完成。注意測試的總執行時間,因為我們現在開始我們的服務,并測量我們可以節省多少時間。

    批量異步請求

    在處理異步操作時,最基本的緩存級別可以通過將一組調用集中到同一個API來實現。這非常簡單:如果我們在調用異步函數的同時在隊列中還有另一個尚未處理的回調,我們可以將回調附加到已經運行的操作上,而不是創建一個全新的請求。看下圖的情況:

    前面的圖像顯示了兩個客戶端(它們可以是兩臺不同的機器,或兩個不同的Web請求),使用完全相同的輸入調用相同的異步操作。 當然,描述這種情況的自然方式是由兩個客戶開始兩個單獨的操作,這兩個操作將在兩個不同的時刻完成,如前圖所示。現在考慮下一個場景,如下圖所示:

    上圖向我們展示了如何對API的兩個請求進行批處理,或者換句話說,對兩個請求執行到相同的操作。通過這樣做,當操作完成時,兩個客戶端將同時被通知。這代表了一種簡單而又非常強大的方式來降低應用程序的負載,而不必處理更復雜的緩存機制,這通常需要適當的內存管理和緩存失效策略。

    在電子商務銷售的Web服務器中使用批處理

    現在讓我們在totalSales API上添加一個批處理層。我們要使用的模式非常簡單:如果在API被調用時已經有另一個相同的請求掛起,我們將把這個回調添加到一個隊列中。當異步操作完成時,其隊列中的所有回調立即被調用。

    現在,讓我們來改變之前的代碼:創建一個名為totalSalesBatch.js的新模塊。在這里,我們將在原始的totalSales API之上實現一個批處理層:

    const totalSales = require('./totalSales');const queues = {}; module.exports = function totalSalesBatch(item, callback) {if(queues[item]) { // [1]console.log('Batching operation');return queues[item].push(callback);}queues[item] = [callback]; // [2]totalSales(item, (err, res) => {const queue = queues[item]; // [3]queues[item] = null;queue.forEach(cb => cb(err, res));}); };

    totalSalesBatch()函數是原始的totalSales() API的代理,它的工作原理如下:

  • 如果請求的item已經存在隊列中,則意味著該特定item的請求已經在服務器任務隊列中。在這種情況下,我們所要做的只是將回調push到現有隊列,并立即從調用中返回。不進行后續操作。
  • 如果請求的item沒有在隊列中,這意味著我們必須創建一個新的請求。為此,我們為該特定item的請求創建一個新隊列,并使用當前回調函數對其進行初始化。 接下來,我們調用原始的totalSales() API。
  • 當原始的totalSales()請求完成時,則執行我們的回調函數,我們遍歷隊列中為該特定請求的item添加的所有回調,并分別調用這些回調函數。
  • totalSalesBatch()函數的行為與原始的totalSales() API的行為相同,不同之處在于,現在對于相同內容的請求API進行批處理,從而節省時間和資源。

    想知道相比于totalSales() API原始的非批處理版本,在性能方面的優勢是什么?然后,讓我們將HTTP服務器使用的totalSales模塊替換為我們剛剛創建的模塊,修改app.js文件如下:

    //const totalSales = require('./totalSales'); const totalSales = require('./totalSalesBatch'); http.createServer(function(req, res) { // ... });

    如果我們現在嘗試再次啟動服務器并進行負載測試,我們首先看到的是請求被批量返回。

    除此之外,我們觀察到請求的總時間大大減少;它應該至少比對原始totalSales() API執行的原始測試快四倍!

    這是一個驚人的結果,證明了只需應用一個簡單的批處理層即可獲得巨大的性能提升,比起緩存機制,也沒有顯得太復雜,因為,無需考慮緩存淘汰策略。

    批處理模式在高負載應用程序和執行較為緩慢的API中發揮巨大作用,正是由于這種模式的運用,可以批量處理大量的請求。

    異步請求緩存策略

    異步批處理模式的問題之一是對于API的答復越快,我們對于批處理來說,其意義就越小。有人可能會爭辯說,如果一個API已經很快了,那么試圖優化它就沒有意義了。然而,它仍然是一個占用應用程序的資源負載的因素,總結起來,仍然可以有解決方案。另外,如果API調用的結果不會經常改變;因此,這時候批處理將并不會有較好的性能提升。在這種情況下,減少應用程序負載并提高響應速度的最佳方案肯定是更好的緩存模式。

    緩存模式很簡單:一旦請求完成,我們將其結果存儲在緩存中,該緩存可以是變量,數據庫中的條目,也可以是專門的緩存服務器。因此,下一次調用API時,可以立即從緩存中檢索結果,而不是產生另一個請求。

    對于一個有經驗的開發人員來說,緩存不應該是多么新的技術,但是異步編程中這種模式的不同之處在于它應該與批處理結合在一起,以達到最佳效果。原因是因為多個請求可能并發運行,而沒有設置緩存,并且當這些請求完成時,緩存將會被設置多次,這樣做則會造成緩存資源的浪費。

    基于這些假設,異步請求緩存模式的最終結構如下圖所示:

    上圖給出了異步緩存算法的兩個步驟:

  • 與批處理模式完全相同,與在未設置高速緩存時接收到的任何請求將一起批處理。這些請求完成時,緩存將會被設置一次。
  • 當緩存最終被設置時,任何后續的請求都將直接從緩存中提供。
  • 另外我們需要考慮Zalgo的反作用(我們已經在Chapter 2-Node.js Essential Patterns中看到了它的實際應用)。在處理異步API時,我們必須確保始終以異步方式返回緩存的值,即使訪問緩存只涉及同步操作。

    在電子商務銷售的Web服務器中使用異步緩存請求

    實踐異步緩存模式的優點,現在讓我們將我們學到的東西應用到totalSales() API。

    與異步批處理示例程序一樣,我們創建一個代理,其作用是添加緩存層。

    然后創建一個名為totalSalesCache.js的新模塊,代碼如下:

    const totalSales = require('./totalSales');const queues = {}; const cache = {};module.exports = function totalSalesBatch(item, callback) {const cached = cache[item];if (cached) {console.log('Cache hit');return process.nextTick(callback.bind(null, null, cached));}if (queues[item]) {console.log('Batching operation');return queues[item].push(callback);}queues[item] = [callback];totalSales(item, (err, res) => {if (!err) {cache[item] = res;setTimeout(() => {delete cache[item];}, 30 * 1000); //30 seconds expiry}const queue = queues[item];queues[item] = null;queue.forEach(cb => cb(err, res));}); };

    我們可以看到前面的代碼與我們異步批處理的很多地方基本相同。 其實唯一的區別是以下幾點:

    • 我們需要做的第一件事就是檢查緩存是否被設置,如果是這種情況,我們將立即使用callback()返回緩存的值,這里必須要使用process.nextTick(),因為緩存可能是異步設定的,需要等到下一次事件輪詢時才能夠保證緩存已經被設定。
    • 繼續異步批處理模式,但是這次,當原始API成功完成時,我們將結果保存到緩存中。此外,我們還設置了一個緩存淘汰機制,在30秒后使緩存失效。 一個簡單而有效的技術!

    現在,我們準備嘗試我們剛創建的totalSales模塊。 先更改app.js模塊,如下所示:

    // const totalSales = require('./totalSales'); // const totalSales = require('./totalSalesBatch'); const totalSales = require('./totalSalesCache');http.createServer(function(req, res) {// ... });

    現在,重新啟動服務器,并使用loadTest.js腳本進行配置,就像我們在前面的例子中所做的那樣。使用默認的測試參數,與簡單的異步批處理模式相比,很明顯地有了更好的性能提升。 當然,這很大程度上取決于很多因素;例如收到的請求數量,以及一個請求和另一個請求之間的延遲等。當請求數量較高且跨越較長時間時,使用高速緩存批處理的優勢將更為顯著。

    Memoization被稱做緩存函數調用的結果的算法。 在npm中,你可以找到許多包來實現異步的memoization,其中最著名的之一之一是memoizee。

    有關實現緩存機制的說明

    我們必須記住,在實際應用中,我們可能想要使用更先進的失效技術和存儲機制。 這可能是必要的,原因如下:

    • 大量的緩存值可能會消耗大量內存。 在這種情況下,可以應用最近最少使用(LRU)算法來保持恒定的存儲器利用率。
    • 當應用程序分布在多個進程中時,對緩存使用簡單變量可能會導致每個服務器實例返回不同的結果。如果這對于我們正在實現的特定應用程序來說是不希望的,那么解決方案就是使用共享存儲來存儲緩存。 常用的解決方案是Redis和Memcached。
    • 與定時淘汰緩存相比,手動淘汰高速緩存可使得高速緩存使用壽命更長,同時提供更新的數據,但當然,管理起緩存來要復雜得多。

    使用Promise進行批處理和緩存

    在Chapter4-Asynchronous Control Flow Patterns with ES2015 and Beyond中,我們看到了Promise如何極大地簡化我們的異步代碼,但是在處理批處理和緩存時,它則可以提供更大的幫助。

    利用Promise進行異步批處理和緩存策略,有如下兩個優點:

    • 多個then()監聽器可以附加到相同的Promise實例。
    • then()監聽器最多保證被調用一次,即使在Promise已經被resolve了之后,then()也能正常工作。 此外,then()總是會被保證其是異步調用的。

    簡而言之,第一個優點正是批處理請求所需要的,而第二個優點則在Promise已經是解析值的緩存時,也會提供同樣的的異步返回緩存值的機制。

    下面開始看代碼,我們可以嘗試使用Promises為totalSales()創建一個模塊,在其中添加批處理和緩存功能。創建一個名為totalSalesPromises.js的新模塊:

    const pify = require('pify'); // [1] const totalSales = pify(require('./totalSales'));const cache = {}; module.exports = function totalSalesPromises(item) {if (cache[item]) { // [2]return cache[item];}cache[item] = totalSales(item) // [3].then(res => { // [4]setTimeout(() => {delete cache[item]}, 30 * 1000); //30 seconds expiryreturn res;}).catch(err => { // [5]delete cache[item];throw err;});return cache[item]; // [6] };

    Promise確實很好,下面是上述函數的功能描述:

  • 首先,我們需要一個名為pify的模塊,它允許我們對totalSales()模塊進行promisification。這樣做之后,totalSales()將返回一個符合ES2015標準的Promise實例,而不是接受一個回調函數作為參數。
  • 當調用totalSalesPromises()時,我們檢查給定的項目類型是否已經在緩存中有相應的Promise。如果我們已經有了這樣的Promise,我們直接返回這個Promise實例。
  • 如果我們在緩存中沒有針對給定項目類型的Promise,我們繼續通過調用原始(promisified)的totalSales()來創建一個Promise實例。
  • 當Promise正常resolve了,我們設置了一個清除緩存的時間(假設為30秒),我們返回res將操作的結果返回給應用程序。
  • 如果Promise被異常reject了,我們立即重置緩存,并再次拋出錯誤,將其傳播到Promise chain中,所以任何附加到相同Promise的其他應用程序也將收到這一異常。
  • 最后,我們返回我們剛才創建或者緩存的Promise實例。
  • 非常簡單直觀,更重要的是,我們使用Promise也能夠實現批處理和緩存。
    如果我們現在要嘗試使用totalSalesPromise()函數,稍微調整app.js模塊,因為現在使用Promise而不是回調函數。 讓我們通過創建一個名為appPromises.js的app模塊來實現:

    const http = require('http'); const url = require('url'); const totalSales = require('./totalSalesPromises');http.createServer(function(req, res) {const query = url.parse(req.url, true).query;totalSales(query.item).then(function(sum) {res.writeHead(200);res.end(`Total sales for item ${query.item} is ${sum}`);}); }).listen(8000, function() {console.log('Started')});

    它的實現與原始應用程序模塊幾乎完全相同,不同的是現在我們使用的是基于Promise的批處理/緩存封裝版本; 因此,我們調用它的方式也略有不同。

    運行以下命令開啟這個新版本的服務器:

    node appPromises

    運行與CPU-bound的任務

    雖然上面的totalSales()在系統資源上面消耗較大,但是其也不會影響服務器處理并發的能力。 我們在Chapter1-Welcome to the Node.js Platform中了解到有關事件循環的內容,應該為此行為提供解釋:調用異步操作會導致堆棧退回到事件循環,從而使其免于處理其他請求。

    但是,當我們運行一個長時間的同步任務時,會發生什么情況,從不會將控制權交還給事件循環?

    這種任務也被稱為CPU-bound,因為它的主要特點是CPU利用率較高,而不是I/O操作繁重。
    讓我們立即舉一個例子上看看這些類型的任務在Node.js中的具體行為。

    解決子集總和問題

    現在讓我們做一個CPU占用比較高的高計算量的實驗。下面來看的是子集總和問題,我們計算一個數組中是否具有一個子數組,其總和為0。例如,如果我們有數組[1, 2, -4, 5, -3]作為輸入,則滿足問題的子數組是[1, 2, -3]和[2, -4, 5, -3]。

    最簡單的算法是把每一個數組元素做遍歷然后依次計算,時間復雜度為O(2^n),或者換句話說,它隨著輸入的數組長度成指數增長。這意味著一組20個整數則會有多達1, 048, 576中情況,顯然不能夠通過窮舉來做到。當然,這個問題的解決方案可能并不算復雜。為了使事情變得更加困難,我們將考慮數組和問題的以下變化:給定一組整數,我們要計算所有可能的組合,其總和等于給定的任意整數。

    const EventEmitter = require('events').EventEmitter; class SubsetSum extends EventEmitter {constructor(sum, set) {super();this.sum = sum;this.set = set;this.totalSubsets = 0;} //... }

    SubsetSum類是EventEmitter類的子類;這使得我們每次找到一個匹配收到的總和作為輸入的新子集時都會發出一個事件。 我們將會看到,這會給我們很大的靈活性。

    接下來,讓我們看看我們如何能夠生成所有可能的子集組合:

    開始構建一個這樣的算法。創建一個名為subsetSum.js的新模塊。在其中聲明一個SubsetSum類:

    _combine(set, subset) {for(let i = 0; i < set.length; i++) {let newSubset = subset.concat(set[i]);this._combine(set.slice(i + 1), newSubset);this._processSubset(newSubset);} }

    不管算法其中到底是什么內容,但有兩點要注意:

    • _combine()方法是完全同步的;它遞歸地生成每一個可能的子集,而不把CPU控制權交還給事件循環。如果我們考慮一下,這對于不需要任何I/O的算法來說是非常正常的。
    • 每當生成一個新的組合時,我們都會將這個組合提供給_processSubset()方法以供進一步處理。

    _processSubset()方法負責驗證給定子集的元素總和是否等于我們要查找的數字:

    _processSubset(subset) {console.log('Subset', ++this.totalSubsets, subset);const res = subset.reduce((prev, item) => (prev + item), 0);if (res == this.sum) {this.emit('match', subset);} }

    簡單地說,_processSubset()方法將reduce操作應用于子集,以便計算其元素的總和。然后,當結果總和等于給定的sum參數時,會發出一個match事件。

    最后,調用start()方法開始執行算法:

    start() {this._combine(this.set, []);this.emit('end'); }

    通過調用_combine()觸發算法,最后觸發一個end事件,表明所有的組合都被檢查過,并且任何可能的匹配都已經被計算出來。 這是可能的,因為_combine()是同步的; 因此,只要前面的函數返回,end事件就會觸發,這意味著所有的組合都被計算出來了。

    接下來,我們在網絡上公開剛剛創建的算法。可以使用一個簡單的HTTP服務器對響應的任務作出響應。 特別是,我們希望以/subsetSum?data=<Array>&sum=<Integer>這樣的請求格式進行響應,傳入給定的數組和sum,使用SubsetSum算法進行匹配。

    在一個名為app.js的模塊中實現這個簡單的服務器:

    const http = require('http'); const SubsetSum = require('./subsetSum');http.createServer((req, res) => {const url = require('url').parse(req.url, true);if(url.pathname === '/subsetSum') {const data = JSON.parse(url.query.data);res.writeHead(200);const subsetSum = new SubsetSum(url.query.sum, data);subsetSum.on('match', match => {res.write('Match: ' + JSON.stringify(match) + '\n');});subsetSum.on('end', () => res.end());subsetSum.start();} else {res.writeHead(200);res.end('I\m alive!\n');} }).listen(8000, () => console.log('Started'));

    由于SubsetSum實例使用事件返回結果,所以我們可以在算法生成后立即對匹配的結果使用Stream進行處理。另一個需要注意的細節是,每次我們的服務器都會返回I'm alive!,這樣我們每次發送一個不同于/subsetSum的請求的時候。可以用來檢查我們服務器是否掛掉了,這在稍后將會看到。

    開始運行:

    node app

    一旦服務器啟動,我們準備發送我們的第一個請求;讓我們嘗試發送一組17個隨機數,這將導致產生131,071個組合,那么服務器將會處理一段時間:

    curl -G http://localhost:8000/subsetSum --data-urlencode "data=[116,119,101,101,-116,109,101,-105,-102,117,-115,-97,119,-116,-104,-105,115]"--data-urlencode "sum=0"

    這是如果我們在第一個請求仍在運行的時候在另一個終端中嘗試輸入以下命令,我們將發現一個巨大的問題:

    curl -G http://localhost:8000

    我們會看到直到第一個請求結束之前,最后一個請求一直處于掛起的狀態。服務器沒有返回響應!這正如我們所想的那樣。Node.js事件循環運行在一個單獨的線程中,如果這個線程被一個長的同步計算阻塞,它將不能再執行一個循環來響應I'm alive!,
    我們必須知道,這種代碼顯然不能夠用于同時接收到多個請求的應用程序。

    但是不要對Node.js中絕望,我們可以通過幾種方式來解決這種情況。我們來分析一下最常見的兩種方案:

    使用setImmediate

    通常,CPU-bound算法是建立在一定規則之上的。它可以是一組遞歸調用,一個循環,或者基于這些的任何變化/組合。 所以,對于我們的問題,一個簡單的解決方案就是在這些步驟完成后(或者在一定數量的步驟之后),將控制權交還給事件循環。這樣,任何待處理的I / O仍然可以在事件循環在長時間運行的算法產生CPU的時間間隔中處理。對于這個問題而言,解決這一問題的方式是把算法的下一步在任何可能導致掛起的I/O請求之后運行。這聽起來像是setImmediate()方法的完美用例(我們已經在Chapter2-Node.js Essential Patterns中介紹過這一API)。

    模式:使用setImmediate()交錯執行長時間運行的同步任務。

    使用setImmediate進行子集求和算法的步驟

    現在我們來看看這個模式如何應用于子集求和算法。 我們所要做的只是稍微修改一下subsetSum.js模塊。 為方便起見,我們將創建一個名為subsetSumDefer.js的新模塊,將原始的subsetSum類的代碼作為起點。
    我們要做的第一個改變是添加一個名為_combineInterleaved()的新方法,它是我們正在實現的模式的核心:

    _combineInterleaved(set, subset) {this.runningCombine++;setImmediate(() => {this._combine(set, subset);if(--this.runningCombine === 0) {this.emit('end');}}); }

    正如我們所看到的,我們所要做的只是使用setImmediate()調用原始的同步的_combine()方法。然而,現在的問題是因為該算法不再是同步的,我們更難以知道何時已經完成了所有的組合的計算。

    為了解決這個問題,我們必須使用非常類似于我們在Chapter3-Asynchronous Control Flow Patterns with Callbacks看到的異步并行執行的模式來追溯_combine()方法的所有正在運行的實例。 當_combine()方法的所有實例都已經完成運行時,觸發end事件,通知任何監聽器,進程需要做的所有動作都已經完成。

    對于最終子集求和算法的重構版本。首先,我們需要將_combine()方法中的遞歸步驟替換為異步:

    _combine(set, subset) {for(let i = 0; i < set.length; i++) {let newSubset = subset.concat(set[i]);this._combineInterleaved(set.slice(i + 1), newSubset);this._processSubset(newSubset);} }

    通過上面的更改,我們確保算法的每個步驟都將使用setImmediate()在事件循環中排隊,在事件循環隊列中I / O請求之后執行,而不是同步運行造成阻塞。

    另一個小調整是對于start()方法:

    start() {this.runningCombine = 0;this._combineInterleaved(this.set, []); }

    在前面的代碼中,我們將_combine()方法的運行實例的數量初始化為0.我們還通過調用_combineInterleaved()來將調用替換為_combine(),并移除了end的觸發,因為現在_combineInterleaved()是異步處理的。
    通過這個最后的改變,我們的子集求和算法現在應該能夠通過事件循環可以運行的時間間隔交替地運行其可能大量占用CPU的代碼,并且不會再造成阻塞。

    最后更新app.js模塊,以便它可以使用新版本的SubsetSum:

    const http = require('http'); // const SubsetSum = require('./subsetSum'); const SubsetSum = require('./subsetSumDefer'); http.createServer(function(req, res) {// ... })

    和之前一樣的方式開始運行,結果如下:

    此時,使用異步的方式運行,不再會阻塞CPU了。

    interleaving模式

    正如我們所看到的,在保持應用程序的響應性的同時運行一個CPU-bound的任務并不復雜,只需要使用setImmediate()把同步執行的代碼變為異步執行即可。但是,這不是效率最好的模式;實際上,延遲執行一個任務會額外帶來一個小的開銷,在這樣的算法中,積少成多,則會產生重大的影響。這通常是我們在運行CPU限制任務時所需要的最后一件事情,特別是如果我們必須將結果直接返回給用戶,這應該在合理的時間內進行響應。 緩解這個問題的一個可能的解決方案是只有在一定數量的步驟之后使用setImmediate(),而不是在每一步中使用它。但是這仍然不能解決問題的根源。

    記住,這并不是說一旦我們想要通過異步的模式來執行CPU-bound的任務,我們就應該不惜一切代價來避免這樣的額外開銷,事實上,從更廣闊的角度來看,同步任務并不一定非常漫長和復雜,以至于造成麻煩。在繁忙的服務器中,即使是阻塞事件循環200毫秒的任務也會產生不希望的延遲。 在那些并發量并不高的服務器來說,即使產生一定短時的阻塞,也不會影響性能,使用交錯執行setImmediate()可能是避免阻塞事件循環的最簡單也是最有效的方法。

    process.nextTick()不能用于交錯長時間運行的任務。正如我們在Chapter1-Welcome to the Node.js Platform中看到的,nextTick()會在任何未返回的I / O之前調度,并且在重復調用process.nextTick()最終會導致I / O饑餓。 你可以通過在前面的例子中用process.nextTick()替換setImmediate()來驗證。

    使用多個進程

    使用interleaving模式并不是我們用來運行CPU-bound任務的唯一方法;防止事件循環阻塞的另一種模式是使用子進程。我們已經知道Node.js在運行I / O密集型應用程序(如Web服務器)的時候是最好的,因為Node.js可以使得我們可以通過異步來優化資源利用率。

    所以,我們必須保持應用程序響應的最好方法是不要在主應用程序的上下文中運行昂貴的CPU-bound任務,而是使用單獨的進程。這有三個主要的優點:

    • 同步任務可以全速運行,而不需要交錯執行的步驟
    • 在Node.js中處理進程很簡單,可能比修改一個使用setImmediate()的算法更容易,并且多進程允許我們輕松使用多個處理器,而無需擴展主應用程序本身。
    • 如果我們真的需要超高的性能,可以使用低級語言,如性能良好的C。

    Node.js有一個充足的API庫帶來與外部進程交互。 我們可以在child_process模塊中找到我們需要的所有東西。 而且,當外部進程只是另一個Node.js程序時,將它連接到主應用程序是非常容易的,我們甚至不覺得我們在本地應用程序外部運行任何東西。這得益于child_process.fork()函數,該函數創建一個新的子Node.js進程,并自動創建一個通信管道,使我們能夠使用與EventEmitter非常相似的接口交換信息。來看如何用這個特性來重構我們的子集求和算法。

    將子集求和任務委托給其他進程

    重構SubsetSum任務的目標是創建一個單獨的子進程,負責處理CPU-bound的任務,使服務器的事件循環專注于處理來自網絡的請求:

  • 我們將創建一個名為processPool.js的新模塊,它將允許我們創建一個正在運行的進程池。創建一個新的進程代價昂貴,需要時間,因此我們需要保持它們不斷運行,盡量不要產生中斷,時刻準備好處理請求,使我們可以節省時間和CPU。此外,進程池需要幫助我們限制同時運行的進程數量,以避免將使我們的應用程序受到拒絕服務(DoS)攻擊。
  • 接下來,我們將創建一個名為subsetSumFork.js的模塊,負責抽象子進程中運行的SubsetSum任務。 它的角色將與子進程進行通信,并將任務的結果展示為來自當前應用程序。
  • 最后,我們需要一個worker(我們的子進程),一個新的Node.js程序,運行子集求和算法并將其結果轉發給父進程。
  • DoS攻擊是企圖使其計劃用戶無法使用機器或網絡資源,例如臨時或無限中斷或暫停連接到Internet的主機的服務。
    實現一個進程池

    先從構建processPool.js模塊開始:

    const fork = require('child_process').fork; class ProcessPool {constructor(file, poolMax) {this.file = file;this.poolMax = poolMax;this.pool = [];this.active = [];this.waiting = [];} //... }

    在模塊的第一部分,引入我們將用來創建新進程的child_process.fork()函數。 然后,我們定義ProcessPool的構造函數,該構造函數接受表示要運行的Node.js程序的文件參數以及池中運行的最大實例數poolMax作為參數。然后我們定義三個實例變量:

    • pool表示的是準備運行的進程
    • active表示的是當前正在運行的進程列表
    • waiting包含所有這些請求的任務隊列,保存由于缺少可用的資源而無法立即實現的任務

    看ProcessPool類的acquire()方法,它負責取出一個準備好被使用的進程:

    acquire(callback) {let worker;if(this.pool.length > 0) { // [1]worker = this.pool.pop();this.active.push(worker);return process.nextTick(callback.bind(null, null, worker));}if(this.active.length >= this.poolMax) { // [2]return this.waiting.push(callback);}worker = fork(this.file); // [3]this.active.push(worker);process.nextTick(callback.bind(null, null, worker)); }

    函數邏輯如下:

  • 如果在進程池中有一個準備好被使用的進程,我們只需將其移動到active數組中,然后通過異步的方式調用其回調函數。
  • 如果池中沒有可用的進程,或者已經達到運行進程的最大數量,必須等待。通過把當前回調放入waiting數組。
  • 如果我們還沒有達到運行進程的最大數量,我們將使用child_process.fork()創建一個新的進程,將其添加到active列表中,然后調用其回調。
  • ProcessPool類的最后一個方法是release(),其目的是將一個進程放回進程池中:

    release(worker) {if(this.waiting.length > 0) { // [1]const waitingCallback = this.waiting.shift();waitingCallback(null, worker);}this.active = this.active.filter(w => worker !== w); // [2]this.pool.push(worker); }

    前面的代碼也很簡單,其解釋如下:

    • 如果在waiting任務隊列里面有任務需要被執行,我們只需為這個任務分配一個進程worker執行。
    • 否則,如果在waiting任務隊列中都沒有需要被執行的任務,我們則把active的進程列表中的進程放回進程池中。

    正如我們所看到的,進程從來沒有中斷,只在為其不斷地重新分配任務,使我們可以通過在每個請求不重新啟動一個進程達到節省時間和空間的目的。然而,重要的是要注意,這可能并不總是最好的選擇,這很大程度上取決于我們的應用程序的要求。為減少進程池長期占用內存,可能的調整如下:

    • 在一個進程空閑一段時間后,終止進程,釋放內存空間。
    • 添加一個機制來終止或重啟沒有響應的或者崩潰了的進程。
    父子進程通信

    現在我們的ProcessPool類已經準備就緒,我們可以使用它來實現SubsetSumFork模塊,SubsetSumFork的作用是與子進程進行通信得到子集求和的結果。前面曾說到,用child_process.fork()啟動一個進程也給了我們創建了一個簡單的基于消息的管道,通過實現subsetSumFork.js模塊來看看它是如何工作的:

    const EventEmitter = require('events').EventEmitter; const ProcessPool = require('./processPool'); const workers = new ProcessPool(__dirname + '/subsetSumWorker.js', 2);class SubsetSumFork extends EventEmitter {constructor(sum, set) {super();this.sum = sum;this.set = set;}start() {workers.acquire((err, worker) => { // [1]worker.send({sum: this.sum, set: this.set});const onMessage = msg => {if (msg.event === 'end') { // [3]worker.removeListener('message', onMessage);workers.release(worker);}this.emit(msg.event, msg.data); // [4]};worker.on('message', onMessage); // [2]});} }module.exports = SubsetSumFork;

    首先注意,我們在subsetSumWorker.js調用ProcessPool的構造函數創建ProcessPool實例。 我們還將進程池的最大容量設置為2。

    另外,我們試圖維持原來的SubsetSum類相同的公共API。實際上,SubsetSumFork是EventEmitter的子類,它的構造函數接受sum和set,而start()方法則觸發算法的執行,而這個SubsetSumFork實例運行在一個單獨的進程上。調用start()方法時會發生的情況:

  • 我們試圖從進程池中獲得一個新的子進程。在創建進程成功之后,我們嘗試向子進程發送一條消息,包含sum和set。 send()方法是Node.js自動提供給child_process.fork()創建的所有進程,這實際上與父子進程之間的通信管道有關。
  • 然后我們開始監聽子進程返回的任何消息,我們使用on()方法附加一個新的事件監聽器(這也是所有以child_process.fork()創建的進程提供的通信通道的一部分)。
  • 在事件監聽器中,我們首先檢查是否收到一個end事件,這意味著SubsetSum所有任務已經完成,在這種情況下,我們刪除onMessage監聽器并釋放worker,并將其放回進程池中,不再讓其占用內存資源和CPU資源。
  • worker以{event,data}格式生成消息,使得任何時候一旦子進程處理完畢任務,我們在外部都能接收到這一消息。
  • 這就是SubsetSumFork模塊現在我們來實現這個worker應用程序。

    與父進程進行通信

    現在我們來創建subsetSumWorker.js模塊,我們的應用程序,這個模塊的全部內容將在一個單獨的進程中運行:

    const SubsetSum = require('./subsetSum');process.on('message', msg => { // [1]const subsetSum = new SubsetSum(msg.sum, msg.set);subsetSum.on('match', data => { // [2]process.send({event: 'match', data: data});});subsetSum.on('end', data => {process.send({event: 'end', data: data});});subsetSum.start(); });

    由于我們的handler處于一個單獨的進程中,我們不必擔心這類CPU-bound任務阻塞事件循環,所有的HTTP請求將繼續由主應用程序的事件循環處理,而不會中斷。

    當子進程開始啟動時,父進程:

  • 子進程立即開始監聽來自父進程的消息。這可以通過process.on()函數輕松實現。我們期望從父進程中唯一的消息是為新的SubsetSum任務提供輸入的消息。只要收到這樣的消息,我們創建一個SubsetSum類的新實例,并注冊match和end事件監聽器。最后,我們用subsetSum.start()開始計算。
  • 每次子集求和算法收到事件時,把結果它封裝在格式為{event,data}的對象中,并將其發送給父進程。這些消息然后在subsetSumFork.js模塊中處理,就像我們在前面的章節中看到的那樣。
  • 注意:當子進程不是Node.js進程時,則上述的通信管道就不可用了。在這種情況下,我們仍然可以通過在暴露于父進程的標準輸入流和標準輸出流之上實現我們自己的協議來建立父子進程通信的接口。

    多進程模式

    嘗試新版本的子集求和算法,我們只需要替換HTTP服務器使用的模塊(文件app.js):

    運行結果如下:

    更有趣的是,我們也可以嘗試同時啟動兩個subsetSum任務,我們可以充分看到多核CPU的作用。 相反,如果我們嘗試同時運行三個subsetSum任務,結果應該是最后一個啟動將掛起。這不是因為主進程的事件循環被阻塞,而是因為我們為subsetSum任務設置了兩個進程的并發限制。

    正如我們所看到的,多進程模式比interleaving模式更加強大和靈活;然而,由于單個機器提供的CPU和內存資源量仍然是一個硬性限制,所以它仍然不可擴展。在這種情況下,將負載分配到多臺機器上,則是更優秀的解決辦法。

    值得一提的是,在運行CPU-bound任務時,多線程可以成為多進程的替代方案。目前,有幾個npm包公開了一個用于處理用戶級模塊的線程的API;其中最流行的是webworker-threads。但是,即使線程更輕量級,完整的進程也可以提供更大的靈活性,并具備更高更可靠的容錯處理。

    總結

    本章講述以下三點:

    • 異步初始化模塊
    • 批處理和緩存在Node.js異步中的運用
    • 使用異步或者多進程來處理CPU-bound的任務

    總結

    以上是生活随笔為你收集整理的《Node.js设计模式》高级异步准则的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    高潮喷水的毛片 | 青青久在线视频免费观看 | 一本色道久久综合狠狠躁 | 久久精品国产日本波多野结衣 | 亚洲成av人片在线观看无码不卡 | 无码精品国产va在线观看dvd | 色婷婷av一区二区三区之红樱桃 | 国模大胆一区二区三区 | 亚洲一区二区三区偷拍女厕 | 中国女人内谢69xxxxxa片 | 午夜精品一区二区三区的区别 | 亚洲s码欧洲m码国产av | 中文字幕日韩精品一区二区三区 | 精品国产麻豆免费人成网站 | 国产精品成人av在线观看 | 欧美阿v高清资源不卡在线播放 | 久久久久99精品国产片 | av无码电影一区二区三区 | 综合网日日天干夜夜久久 | 亚无码乱人伦一区二区 | 亚洲一区二区三区播放 | 国产av无码专区亚洲a∨毛片 | 亚洲午夜久久久影院 | 成人无码精品1区2区3区免费看 | 国产精品久久久午夜夜伦鲁鲁 | 国产精品va在线播放 | 国产成人精品三级麻豆 | 小鲜肉自慰网站xnxx | 亚洲 a v无 码免 费 成 人 a v | 国产成人久久精品流白浆 | 夜精品a片一区二区三区无码白浆 | 亚洲国产欧美国产综合一区 | 玩弄人妻少妇500系列视频 | 国产精品久久久久久久9999 | 特黄特色大片免费播放器图片 | 久久无码中文字幕免费影院蜜桃 | 中文字幕乱妇无码av在线 | 精品国产一区av天美传媒 | 国内精品人妻无码久久久影院蜜桃 | 任你躁国产自任一区二区三区 | 无码av最新清无码专区吞精 | 成人试看120秒体验区 | 99精品无人区乱码1区2区3区 | 99re在线播放 | 国产精品沙发午睡系列 | 无码av免费一区二区三区试看 | 99久久久国产精品无码免费 | 中文字幕乱码亚洲无线三区 | 久久精品无码一区二区三区 | 久久久久成人精品免费播放动漫 | 特黄特色大片免费播放器图片 | 国产精品毛多多水多 | 中文精品无码中文字幕无码专区 | 国产精品永久免费视频 | 无码av岛国片在线播放 | 日本一卡2卡3卡四卡精品网站 | 人妻体内射精一区二区三四 | 波多野结衣av在线观看 | 蜜桃臀无码内射一区二区三区 | 国产无套内射久久久国产 | 国产色在线 | 国产 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产麻豆精品精东影业av网站 | 老熟妇乱子伦牲交视频 | 狠狠噜狠狠狠狠丁香五月 | 欧美肥老太牲交大战 | 免费男性肉肉影院 | 狠狠躁日日躁夜夜躁2020 | 亚洲精品无码人妻无码 | 97久久国产亚洲精品超碰热 | 成人无码精品1区2区3区免费看 | 精品国产一区二区三区四区 | 日本一区二区三区免费播放 | 久久久久久久女国产乱让韩 | 中文无码伦av中文字幕 | 麻豆国产人妻欲求不满谁演的 | 97久久超碰中文字幕 | 99久久人妻精品免费二区 | 鲁大师影院在线观看 | 蜜桃无码一区二区三区 | 麻豆av传媒蜜桃天美传媒 | 亚洲欧美国产精品专区久久 | 亚洲另类伦春色综合小说 | 久久综合香蕉国产蜜臀av | 久久久久人妻一区精品色欧美 | 少妇人妻av毛片在线看 | 亚洲中文字幕在线观看 | 成人毛片一区二区 | 夜精品a片一区二区三区无码白浆 | 中文字幕无码人妻少妇免费 | av人摸人人人澡人人超碰下载 | 中文无码成人免费视频在线观看 | 国产特级毛片aaaaaaa高清 | 牲欲强的熟妇农村老妇女 | 综合人妻久久一区二区精品 | 久激情内射婷内射蜜桃人妖 | 日本丰满熟妇videos | 性色av无码免费一区二区三区 | 国产舌乚八伦偷品w中 | 18禁黄网站男男禁片免费观看 | 国产香蕉尹人视频在线 | 亚洲中文字幕成人无码 | 亚洲人成影院在线观看 | 国产小呦泬泬99精品 | 国产成人无码午夜视频在线观看 | 亚洲成色在线综合网站 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 在线看片无码永久免费视频 | 国产熟妇高潮叫床视频播放 | 国内精品久久久久久中文字幕 | 少妇无码一区二区二三区 | 樱花草在线播放免费中文 | 成人免费视频视频在线观看 免费 | 日韩视频 中文字幕 视频一区 | 精品人妻人人做人人爽夜夜爽 | 一区二区三区高清视频一 | 色综合久久久无码中文字幕 | 熟妇人妻无码xxx视频 | 无码精品国产va在线观看dvd | 亚洲中文字幕在线观看 | 男女超爽视频免费播放 | 成人无码视频免费播放 | 粗大的内捧猛烈进出视频 | 亚洲国产成人a精品不卡在线 | 亚洲一区二区三区国产精华液 | 亚洲成色在线综合网站 | 伦伦影院午夜理论片 | 无码纯肉视频在线观看 | 亚洲中文字幕在线观看 | 老子影院午夜伦不卡 | 国产亚洲精品久久久久久国模美 | 久久久久se色偷偷亚洲精品av | 久久天天躁夜夜躁狠狠 | 久久 国产 尿 小便 嘘嘘 | 四虎国产精品一区二区 | 精品久久久中文字幕人妻 | 国产精品高潮呻吟av久久4虎 | 四虎永久在线精品免费网址 | 精品少妇爆乳无码av无码专区 | 久久久久久av无码免费看大片 | 99国产精品白浆在线观看免费 | 日日摸天天摸爽爽狠狠97 | 久久国产精品精品国产色婷婷 | 欧美第一黄网免费网站 | 日韩精品一区二区av在线 | 欧美人与禽猛交狂配 | 国产片av国语在线观看 | 夫妻免费无码v看片 | 天天综合网天天综合色 | 欧美高清在线精品一区 | 国精品人妻无码一区二区三区蜜柚 | 色欲人妻aaaaaaa无码 | 男女爱爱好爽视频免费看 | 日本成熟视频免费视频 | 国产成人精品久久亚洲高清不卡 | 三级4级全黄60分钟 | 欧洲极品少妇 | 色婷婷av一区二区三区之红樱桃 | 色五月五月丁香亚洲综合网 | 亚洲成av人片在线观看无码不卡 | 小泽玛莉亚一区二区视频在线 | 亚洲日本va中文字幕 | 日本成熟视频免费视频 | 国产美女极度色诱视频www | 欧美日韩久久久精品a片 | 国产热a欧美热a在线视频 | 香蕉久久久久久av成人 | 九九久久精品国产免费看小说 | 荫蒂被男人添的好舒服爽免费视频 | 亚拍精品一区二区三区探花 | 精品偷自拍另类在线观看 | 亚洲成a人片在线观看无码3d | 欧美第一黄网免费网站 | 色狠狠av一区二区三区 | 午夜熟女插插xx免费视频 | 午夜精品一区二区三区在线观看 | 97夜夜澡人人爽人人喊中国片 | 久久亚洲a片com人成 | 亚洲狠狠色丁香婷婷综合 | 日日麻批免费40分钟无码 | 色妞www精品免费视频 | 亚洲无人区午夜福利码高清完整版 | 欧美精品免费观看二区 | 亚洲人交乣女bbw | 性生交大片免费看l | 日产精品高潮呻吟av久久 | 日韩精品成人一区二区三区 | 久久国产自偷自偷免费一区调 | 丰满肥臀大屁股熟妇激情视频 | a国产一区二区免费入口 | 麻豆国产97在线 | 欧洲 | 国产成人精品必看 | 精品人妻人人做人人爽夜夜爽 | 国产av剧情md精品麻豆 | 中文字幕无码视频专区 | 在线观看国产午夜福利片 | 久久精品女人的天堂av | 国产午夜福利100集发布 | 亚洲人成人无码网www国产 | 午夜熟女插插xx免费视频 | 少妇激情av一区二区 | 九月婷婷人人澡人人添人人爽 | 狂野欧美性猛xxxx乱大交 | 久久综合给久久狠狠97色 | 天天拍夜夜添久久精品 | 免费乱码人妻系列无码专区 | 中文字幕人妻无码一区二区三区 | 日日橹狠狠爱欧美视频 | 亚洲 日韩 欧美 成人 在线观看 | 97精品国产97久久久久久免费 | 亚洲成av人影院在线观看 | 欧美激情综合亚洲一二区 | 婷婷丁香五月天综合东京热 | 九月婷婷人人澡人人添人人爽 | 岛国片人妻三上悠亚 | 我要看www免费看插插视频 | 久久久久久亚洲精品a片成人 | 久久99精品久久久久久 | 青青草原综合久久大伊人精品 | 给我免费的视频在线观看 | 日本一区二区三区免费高清 | 狠狠cao日日穞夜夜穞av | 久久99久久99精品中文字幕 | 国产成人一区二区三区在线观看 | 亚洲综合精品香蕉久久网 | 国产综合久久久久鬼色 | 久久精品99久久香蕉国产色戒 | 无套内谢的新婚少妇国语播放 | а天堂中文在线官网 | 老熟妇仑乱视频一区二区 | 性色欲情网站iwww九文堂 | 国产av剧情md精品麻豆 | 丰满人妻翻云覆雨呻吟视频 | 亚洲成a人片在线观看无码 | 亚洲日韩精品欧美一区二区 | 蜜桃视频韩日免费播放 | 国产成人无码午夜视频在线观看 | 在线观看免费人成视频 | 一本加勒比波多野结衣 | 九九综合va免费看 | 亚洲精品久久久久久久久久久 | 亚洲国产精品一区二区第一页 | 国产人妻精品一区二区三区不卡 | 欧美freesex黑人又粗又大 | 午夜丰满少妇性开放视频 | 国产在线精品一区二区高清不卡 | 骚片av蜜桃精品一区 | 国产sm调教视频在线观看 | 久久久久成人精品免费播放动漫 | 欧美性黑人极品hd | 中文无码成人免费视频在线观看 | 久久国产精品二国产精品 | 亚洲熟妇色xxxxx亚洲 | 精品一区二区三区波多野结衣 | 国产午夜精品一区二区三区嫩草 | 亚洲自偷精品视频自拍 | 国产97色在线 | 免 | 亚洲熟妇色xxxxx欧美老妇y | 黑人粗大猛烈进出高潮视频 | 狂野欧美激情性xxxx | 奇米影视7777久久精品 | 一本久久a久久精品亚洲 | 久久久久99精品成人片 | 无码福利日韩神码福利片 | 国产真实伦对白全集 | 国产精品久久福利网站 | 精品国产成人一区二区三区 | 亚洲男人av天堂午夜在 | 激情内射亚州一区二区三区爱妻 | 中文字幕人妻无码一夲道 | 粉嫩少妇内射浓精videos | 美女毛片一区二区三区四区 | 巨爆乳无码视频在线观看 | 黑人粗大猛烈进出高潮视频 | 久久久av男人的天堂 | 天天做天天爱天天爽综合网 | 亚洲娇小与黑人巨大交 | 少妇激情av一区二区 | 久久综合给久久狠狠97色 | 人妻人人添人妻人人爱 | 成人精品一区二区三区中文字幕 | 激情内射亚州一区二区三区爱妻 | 午夜无码人妻av大片色欲 | 国精产品一品二品国精品69xx | 欧美熟妇另类久久久久久多毛 | 色窝窝无码一区二区三区色欲 | 国产人妖乱国产精品人妖 | 天天躁夜夜躁狠狠是什么心态 | 亚洲一区二区观看播放 | 日本va欧美va欧美va精品 | 全黄性性激高免费视频 | 国产精品久久久久无码av色戒 | 欧美精品在线观看 | 青青青爽视频在线观看 | 亚洲国产成人av在线观看 | 国产精品自产拍在线观看 | 精品无码国产自产拍在线观看蜜 | 99视频精品全部免费免费观看 | 性欧美牲交在线视频 | 俄罗斯老熟妇色xxxx | 最新国产麻豆aⅴ精品无码 | 天天拍夜夜添久久精品大 | 天天拍夜夜添久久精品大 | 成年美女黄网站色大免费全看 | 5858s亚洲色大成网站www | 理论片87福利理论电影 | 亚洲精品成人福利网站 | 亚洲色欲色欲天天天www | 亚洲s码欧洲m码国产av | 国产成人综合在线女婷五月99播放 | 无码av中文字幕免费放 | 97久久国产亚洲精品超碰热 | 中文字幕乱码人妻无码久久 | 国产热a欧美热a在线视频 | 性欧美videos高清精品 | 亚洲国产成人a精品不卡在线 | 亚洲 a v无 码免 费 成 人 a v | a在线观看免费网站大全 | 色综合久久88色综合天天 | 日韩精品久久久肉伦网站 | 亚洲a无码综合a国产av中文 | 国产人成高清在线视频99最全资源 | 领导边摸边吃奶边做爽在线观看 | 一区二区三区乱码在线 | 欧洲 | 国产一区二区三区精品视频 | 一个人看的www免费视频在线观看 | 四虎国产精品一区二区 | 99久久99久久免费精品蜜桃 | 鲁大师影院在线观看 | 夜夜影院未满十八勿进 | 亚洲乱码日产精品bd | 国产精品久免费的黄网站 | 麻豆国产人妻欲求不满 | 性生交大片免费看女人按摩摩 | 成人av无码一区二区三区 | 亚洲国产精品久久久天堂 | 偷窥日本少妇撒尿chinese | 天天躁日日躁狠狠躁免费麻豆 | 丰满护士巨好爽好大乳 | 久久综合激激的五月天 | 国产精品无码成人午夜电影 | 日韩精品a片一区二区三区妖精 | 欧美日韩综合一区二区三区 | 清纯唯美经典一区二区 | 久久人人97超碰a片精品 | 国产精品欧美成人 | 无码午夜成人1000部免费视频 | 国产精品欧美成人 | 久久五月精品中文字幕 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品综合一区二区三区在线 | 熟妇人妻中文av无码 | 国产精品第一区揄拍无码 | 东京热男人av天堂 | 成年女人永久免费看片 | 少妇性荡欲午夜性开放视频剧场 | 亚洲色www成人永久网址 | 最近的中文字幕在线看视频 | 中文字幕av日韩精品一区二区 | 搡女人真爽免费视频大全 | 久久99久久99精品中文字幕 | 一本色道久久综合亚洲精品不卡 | 色欲人妻aaaaaaa无码 | 丁香花在线影院观看在线播放 | 无码人妻少妇伦在线电影 | 亚洲国产精品一区二区第一页 | 国产精品-区区久久久狼 | 欧美老熟妇乱xxxxx | 亚洲熟妇自偷自拍另类 | 性生交片免费无码看人 | 亚洲日韩精品欧美一区二区 | 男女性色大片免费网站 | 男女爱爱好爽视频免费看 | 免费播放一区二区三区 | 九九综合va免费看 | 秋霞成人午夜鲁丝一区二区三区 | 国产精品鲁鲁鲁 | 夜夜影院未满十八勿进 | 日本丰满护士爆乳xxxx | av在线亚洲欧洲日产一区二区 | 2020最新国产自产精品 | 国产午夜精品一区二区三区嫩草 | 2020久久超碰国产精品最新 | 欧美性生交xxxxx久久久 | 人人妻人人澡人人爽人人精品 | 国产精品成人av在线观看 | 久久国产精品偷任你爽任你 | 久久久久人妻一区精品色欧美 | 无码人妻少妇伦在线电影 | 国产在线无码精品电影网 | 欧美三级不卡在线观看 | 无码毛片视频一区二区本码 | 男人扒开女人内裤强吻桶进去 | 日产精品99久久久久久 | av无码不卡在线观看免费 | 国产精品人妻一区二区三区四 | 国产麻豆精品一区二区三区v视界 | 377p欧洲日本亚洲大胆 | 俺去俺来也www色官网 | 大色综合色综合网站 | 性欧美videos高清精品 | 东京热男人av天堂 | 爽爽影院免费观看 | 亚洲伊人久久精品影院 | 娇妻被黑人粗大高潮白浆 | 中文字幕乱码人妻无码久久 | 久久久www成人免费毛片 | 少妇人妻偷人精品无码视频 | 67194成是人免费无码 | 一区二区三区高清视频一 | 鲁大师影院在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 久久久精品人妻久久影视 | 精品无码一区二区三区的天堂 | 三级4级全黄60分钟 | 在线观看国产一区二区三区 | 7777奇米四色成人眼影 | 国产一区二区三区影院 | 大胆欧美熟妇xx | 亚洲综合无码久久精品综合 | 亚洲日韩av一区二区三区中文 | 亚洲国产精品成人久久蜜臀 | 成年女人永久免费看片 | 搡女人真爽免费视频大全 | 理论片87福利理论电影 | 亚洲人成无码网www | 鲁大师影院在线观看 | 国产精品理论片在线观看 | 高潮毛片无遮挡高清免费视频 | 伊人久久大香线焦av综合影院 | 少妇激情av一区二区 | 国产猛烈高潮尖叫视频免费 | 亚洲精品国偷拍自产在线麻豆 | 亚洲中文字幕无码一久久区 | 少妇一晚三次一区二区三区 | 国产一区二区三区日韩精品 | 97夜夜澡人人双人人人喊 | 日日橹狠狠爱欧美视频 | 亚洲国产日韩a在线播放 | 成人精品视频一区二区 | 久久国语露脸国产精品电影 | 中文无码伦av中文字幕 | 久久精品人人做人人综合试看 | 人妻夜夜爽天天爽三区 | 99国产精品白浆在线观看免费 | 日本精品人妻无码免费大全 | 又大又硬又爽免费视频 | 欧美熟妇另类久久久久久多毛 | 亚洲の无码国产の无码影院 | 高清国产亚洲精品自在久久 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品人人爽人人做我的可爱 | 久久99精品久久久久久动态图 | 国产av久久久久精东av | 性生交大片免费看l | 亚洲成a人片在线观看日本 | 丰满肥臀大屁股熟妇激情视频 | 亚洲爆乳精品无码一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 人妻少妇精品无码专区二区 | 日韩精品一区二区av在线 | 日本一卡二卡不卡视频查询 | 国产超碰人人爽人人做人人添 | 欧美日韩亚洲国产精品 | 久久久久久九九精品久 | 人人妻人人澡人人爽欧美精品 | 亚洲综合无码久久精品综合 | 娇妻被黑人粗大高潮白浆 | 久久成人a毛片免费观看网站 | 欧美精品国产综合久久 | 欧美丰满老熟妇xxxxx性 | 色婷婷欧美在线播放内射 | 国产又爽又猛又粗的视频a片 | 最近的中文字幕在线看视频 | 亚洲色欲久久久综合网东京热 | 1000部夫妻午夜免费 | 国产香蕉97碰碰久久人人 | 青青青爽视频在线观看 | 97资源共享在线视频 | 夜先锋av资源网站 | 国产高潮视频在线观看 | 巨爆乳无码视频在线观看 | 国产精品视频免费播放 | 爆乳一区二区三区无码 | 亚洲综合伊人久久大杳蕉 | 国产成人精品视频ⅴa片软件竹菊 | 99久久人妻精品免费二区 | 午夜精品久久久内射近拍高清 | 人人妻人人澡人人爽精品欧美 | 国产亚洲精品久久久ai换 | 日本护士毛茸茸高潮 | 精品国产青草久久久久福利 | 无码纯肉视频在线观看 | 亚洲午夜久久久影院 | 欧美黑人巨大xxxxx | 国产激情无码一区二区app | 国产精品人妻一区二区三区四 | 国产精品久久福利网站 | 精品一区二区三区无码免费视频 | 日日摸天天摸爽爽狠狠97 | 国产亚洲人成a在线v网站 | 成人影院yy111111在线观看 | 一二三四在线观看免费视频 | 欧美性猛交内射兽交老熟妇 | 最近中文2019字幕第二页 | 中文无码精品a∨在线观看不卡 | 精品国精品国产自在久国产87 | 理论片87福利理论电影 | 四虎永久在线精品免费网址 | 成 人 免费观看网站 | 秋霞特色aa大片 | 成熟妇人a片免费看网站 | 久久亚洲国产成人精品性色 | 无码人妻精品一区二区三区不卡 | 日韩无套无码精品 | 久久精品无码一区二区三区 | 中文字幕久久久久人妻 | 国内少妇偷人精品视频免费 | 一本色道婷婷久久欧美 | 中文字幕无码乱人伦 | 任你躁在线精品免费 | 黑人粗大猛烈进出高潮视频 | 国产精品久久久久久亚洲影视内衣 | 亚洲色无码一区二区三区 | 国产成人人人97超碰超爽8 | 宝宝好涨水快流出来免费视频 | 天海翼激烈高潮到腰振不止 | 蜜臀av在线播放 久久综合激激的五月天 | 国产成人精品视频ⅴa片软件竹菊 | 欧美国产亚洲日韩在线二区 | 亚洲中文无码av永久不收费 | 97精品人妻一区二区三区香蕉 | 亚洲乱码国产乱码精品精 | а√天堂www在线天堂小说 | 亚无码乱人伦一区二区 | 性做久久久久久久免费看 | 女高中生第一次破苞av | 亚洲国产高清在线观看视频 | 人人超人人超碰超国产 | 牲欲强的熟妇农村老妇女视频 | 亚洲色成人中文字幕网站 | 中文字幕无码免费久久99 | 国产精品无套呻吟在线 | 成人无码精品一区二区三区 | 99视频精品全部免费免费观看 | 亚洲狠狠色丁香婷婷综合 | 无码人妻少妇伦在线电影 | 午夜免费福利小电影 | 人妻少妇被猛烈进入中文字幕 | 人妻熟女一区 | 99麻豆久久久国产精品免费 | 丰满人妻精品国产99aⅴ | 国产香蕉尹人综合在线观看 | 久久99精品久久久久久 | 中文字幕无码av激情不卡 | 日韩欧美群交p片內射中文 | 国产美女极度色诱视频www | 女人和拘做爰正片视频 | 国产精品国产自线拍免费软件 | 午夜福利不卡在线视频 | 亚洲a无码综合a国产av中文 | 一本大道久久东京热无码av | 国产在线一区二区三区四区五区 | 欧美 日韩 亚洲 在线 | 国产极品美女高潮无套在线观看 | 亚洲欧美国产精品专区久久 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲色大成网站www | 久久熟妇人妻午夜寂寞影院 | 美女黄网站人色视频免费国产 | 白嫩日本少妇做爰 | 久久久久se色偷偷亚洲精品av | 欧美zoozzooz性欧美 | 久久久久亚洲精品男人的天堂 | 精品久久8x国产免费观看 | 国产激情无码一区二区 | 日韩人妻少妇一区二区三区 | 波多野结衣 黑人 | 大肉大捧一进一出视频出来呀 | 国产乱子伦视频在线播放 | 少妇无码av无码专区在线观看 | 成 人影片 免费观看 | 99麻豆久久久国产精品免费 | 亚洲熟女一区二区三区 | 国产精品毛片一区二区 | 成在人线av无码免观看麻豆 | 日日碰狠狠躁久久躁蜜桃 | 国产成人精品久久亚洲高清不卡 | 欧美亚洲日韩国产人成在线播放 | 国产精品久久久久9999小说 | 亚洲成av人影院在线观看 | 欧美日韩精品 | 亚洲性无码av中文字幕 | 少妇愉情理伦片bd | 亚洲国产欧美国产综合一区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲理论电影在线观看 | 日本精品久久久久中文字幕 | 高清不卡一区二区三区 | 夜夜躁日日躁狠狠久久av | 国产精品第一区揄拍无码 | 成在人线av无码免观看麻豆 | 老熟女乱子伦 | 国产精品久久国产三级国 | 嫩b人妻精品一区二区三区 | 男女性色大片免费网站 | 日韩精品无码一本二本三本色 | 欧美人与善在线com | 亚洲中文字幕无码中字 | 无码乱肉视频免费大全合集 | 亚洲欧美日韩综合久久久 | 狂野欧美激情性xxxx | www国产亚洲精品久久网站 | 久久久亚洲欧洲日产国码αv | 成 人影片 免费观看 | 国产激情综合五月久久 | 免费观看黄网站 | 在线观看国产午夜福利片 | 国产精品无码久久av | 99久久婷婷国产综合精品青草免费 | 88国产精品欧美一区二区三区 | 成人亚洲精品久久久久软件 | 久久国产精品二国产精品 | 波多野结衣乳巨码无在线观看 | 一本色道婷婷久久欧美 | 成熟人妻av无码专区 | 女人被男人爽到呻吟的视频 | 九月婷婷人人澡人人添人人爽 | 免费无码一区二区三区蜜桃大 | 日本高清一区免费中文视频 | 99久久久国产精品无码免费 | 亚洲色偷偷男人的天堂 | 最新国产乱人伦偷精品免费网站 | 漂亮人妻洗澡被公强 日日躁 | 亚洲中文字幕成人无码 | 久久久久亚洲精品男人的天堂 | 一本大道久久东京热无码av | 老太婆性杂交欧美肥老太 | 99久久精品国产一区二区蜜芽 | 无套内谢的新婚少妇国语播放 | 色偷偷人人澡人人爽人人模 | 性啪啪chinese东北女人 | 亚洲成av人片在线观看无码不卡 | 一本久久a久久精品亚洲 | 精品国产精品久久一区免费式 | 国产乱码精品一品二品 | 色欲久久久天天天综合网精品 | 国内综合精品午夜久久资源 | 久久久久久九九精品久 | 欧美一区二区三区视频在线观看 | 日韩人妻少妇一区二区三区 | av无码久久久久不卡免费网站 | 国产精品免费大片 | 成人亚洲精品久久久久软件 | 人人爽人人澡人人高潮 | 亚洲精品一区二区三区大桥未久 | 无码av最新清无码专区吞精 | 国产在线精品一区二区高清不卡 | 无套内谢老熟女 | 日日摸日日碰夜夜爽av | 午夜免费福利小电影 | 亚洲理论电影在线观看 | 嫩b人妻精品一区二区三区 | 人妻少妇精品视频专区 | 狂野欧美性猛xxxx乱大交 | 亚洲精品国产品国语在线观看 | 亚洲色大成网站www | 青青青手机频在线观看 | 亚洲精品一区国产 | 色综合久久久无码中文字幕 | 综合人妻久久一区二区精品 | 国产猛烈高潮尖叫视频免费 | 久久久久成人片免费观看蜜芽 | 麻豆果冻传媒2021精品传媒一区下载 | 啦啦啦www在线观看免费视频 | 久9re热视频这里只有精品 | 成人无码视频免费播放 | 无码人妻久久一区二区三区不卡 | 人人妻人人藻人人爽欧美一区 | 在线视频网站www色 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产麻豆精品一区二区三区v视界 | 久久亚洲精品中文字幕无男同 | 综合激情五月综合激情五月激情1 | 成人片黄网站色大片免费观看 | 免费看少妇作爱视频 | 中文无码精品a∨在线观看不卡 | 亚洲综合伊人久久大杳蕉 | 在线看片无码永久免费视频 | 成人动漫在线观看 | 天干天干啦夜天干天2017 | 无码任你躁久久久久久久 | 97资源共享在线视频 | 欧美国产日韩亚洲中文 | 国产香蕉尹人视频在线 | 蜜桃视频韩日免费播放 | 中文字幕人妻无码一区二区三区 | 精品久久久无码中文字幕 | 中文字幕日产无线码一区 | 香港三级日本三级妇三级 | 亚欧洲精品在线视频免费观看 | 女人被男人躁得好爽免费视频 | 一区二区三区高清视频一 | 色五月丁香五月综合五月 | 国产高清av在线播放 | 久久国产精品偷任你爽任你 | √天堂资源地址中文在线 | 蜜桃臀无码内射一区二区三区 | 国产黑色丝袜在线播放 | 亚洲自偷自拍另类第1页 | 日本肉体xxxx裸交 | 亚洲精品国产精品乱码视色 | 国产成人精品无码播放 | 国产精品久久久一区二区三区 | 亚洲人成影院在线无码按摩店 | 免费无码av一区二区 | a在线观看免费网站大全 | 奇米影视7777久久精品人人爽 | av无码久久久久不卡免费网站 | 国产一区二区三区四区五区加勒比 | 欧美 亚洲 国产 另类 | 中文无码伦av中文字幕 | 亚洲国产精品无码一区二区三区 | 中文字幕日韩精品一区二区三区 | 午夜丰满少妇性开放视频 | 欧洲vodafone精品性 | 欧美日本免费一区二区三区 | 欧美真人作爱免费视频 | 欧美三级a做爰在线观看 | 国产美女极度色诱视频www | 久久国产精品精品国产色婷婷 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲色www成人永久网址 | 日日摸日日碰夜夜爽av | 国产一区二区三区精品视频 | 亚洲精品美女久久久久久久 | 欧美成人午夜精品久久久 | 色狠狠av一区二区三区 | 一本久道高清无码视频 | 欧美熟妇另类久久久久久不卡 | 国产精品欧美成人 | 久久精品丝袜高跟鞋 | 无码帝国www无码专区色综合 | 中文字幕 亚洲精品 第1页 | 国内少妇偷人精品视频 | 成人精品视频一区二区三区尤物 | 中文字幕乱码中文乱码51精品 | aⅴ亚洲 日韩 色 图网站 播放 | 欧洲美熟女乱又伦 | 永久免费精品精品永久-夜色 | 国产av一区二区三区最新精品 | 狠狠cao日日穞夜夜穞av | 久久久久成人片免费观看蜜芽 | 精品 日韩 国产 欧美 视频 | a片免费视频在线观看 | 婷婷五月综合缴情在线视频 | 欧美日韩亚洲国产精品 | 国产精品亚洲а∨无码播放麻豆 | 特大黑人娇小亚洲女 | 中文字幕人妻无码一区二区三区 | 亚洲狠狠婷婷综合久久 | 天天爽夜夜爽夜夜爽 | 天堂无码人妻精品一区二区三区 | 美女极度色诱视频国产 | 波多野结衣一区二区三区av免费 | 99在线 | 亚洲 | 未满小14洗澡无码视频网站 | 日韩欧美成人免费观看 | 伊人久久大香线蕉av一区二区 | 国产免费观看黄av片 | 国产精品18久久久久久麻辣 | 久久国产精品精品国产色婷婷 | 国产sm调教视频在线观看 | 欧美性猛交内射兽交老熟妇 | 欧美成人家庭影院 | 激情五月综合色婷婷一区二区 | 国产精品二区一区二区aⅴ污介绍 | 男女爱爱好爽视频免费看 | 国产精品丝袜黑色高跟鞋 | 一个人看的视频www在线 | 一本久道高清无码视频 | 国产综合在线观看 | 欧美兽交xxxx×视频 | 午夜福利不卡在线视频 | 少妇厨房愉情理9仑片视频 | 麻豆人妻少妇精品无码专区 | 国产精品永久免费视频 | 亚洲中文无码av永久不收费 | 日日摸夜夜摸狠狠摸婷婷 | 97久久国产亚洲精品超碰热 | 性欧美熟妇videofreesex | 亚洲综合无码久久精品综合 | 日本又色又爽又黄的a片18禁 | 天天爽夜夜爽夜夜爽 | 人妻无码久久精品人妻 | 99久久久无码国产精品免费 | 亚洲最大成人网站 | 欧美日韩久久久精品a片 | 无码中文字幕色专区 | 中文无码精品a∨在线观看不卡 | 亚洲va中文字幕无码久久不卡 | 精品一区二区三区无码免费视频 | 午夜男女很黄的视频 | 亚洲乱亚洲乱妇50p | 国产成人精品三级麻豆 | 久久精品中文字幕一区 | 男女性色大片免费网站 | 免费观看激色视频网站 | 国产精品久久久久久无码 | 久久久久久久人妻无码中文字幕爆 | 中文字幕亚洲情99在线 | 日本一卡二卡不卡视频查询 | 日产精品高潮呻吟av久久 | 色一情一乱一伦一视频免费看 | 久久国语露脸国产精品电影 | 国产亚洲精品久久久久久国模美 | 欧美成人午夜精品久久久 | 精品久久久中文字幕人妻 | 婷婷综合久久中文字幕蜜桃三电影 | 久久久久久久久蜜桃 | 久久精品视频在线看15 | 熟妇女人妻丰满少妇中文字幕 | 少妇被黑人到高潮喷出白浆 | 一本久久伊人热热精品中文字幕 | 亚洲成色www久久网站 | 动漫av网站免费观看 | 一二三四社区在线中文视频 | 久久亚洲精品成人无码 | 成人免费无码大片a毛片 | 女人被爽到呻吟gif动态图视看 | 亚洲成av人片在线观看无码不卡 | 欧美国产日韩亚洲中文 | 亚洲欧美色中文字幕在线 | 国产精品久久久av久久久 | 精品久久久久久人妻无码中文字幕 | 亚洲精品国产品国语在线观看 | 18精品久久久无码午夜福利 | 少妇被粗大的猛进出69影院 | 青青草原综合久久大伊人精品 | 亚洲中文字幕av在天堂 | 国产精品视频免费播放 | 大屁股大乳丰满人妻 | 亚洲爆乳大丰满无码专区 | 日日碰狠狠丁香久燥 | 久久久中文字幕日本无吗 | 激情内射亚州一区二区三区爱妻 | 国产成人无码av片在线观看不卡 | 在线精品亚洲一区二区 | 欧美精品免费观看二区 | 午夜肉伦伦影院 | 荫蒂添的好舒服视频囗交 | 国产av一区二区三区最新精品 | 精品人人妻人人澡人人爽人人 | 十八禁真人啪啪免费网站 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产亚洲欧美日韩亚洲中文色 | 丰满护士巨好爽好大乳 | 久久综合久久自在自线精品自 | 清纯唯美经典一区二区 | 久久久精品人妻久久影视 | 亚洲の无码国产の无码影院 | 国产精品内射视频免费 | 久久熟妇人妻午夜寂寞影院 | 亚拍精品一区二区三区探花 | 综合网日日天干夜夜久久 | 俺去俺来也www色官网 | 欧美老人巨大xxxx做受 | 亚洲精品一区二区三区在线观看 | 国产区女主播在线观看 | 久久久久亚洲精品中文字幕 | 欧美日韩视频无码一区二区三 | 国产超碰人人爽人人做人人添 | 暴力强奷在线播放无码 | 伊人久久大香线蕉亚洲 | 永久免费精品精品永久-夜色 | 久久97精品久久久久久久不卡 | 亚洲小说图区综合在线 | 免费无码一区二区三区蜜桃大 | 久久久久国色av免费观看性色 | 少妇性l交大片欧洲热妇乱xxx | 未满小14洗澡无码视频网站 | 国产精品成人av在线观看 | 色偷偷人人澡人人爽人人模 | 国产激情无码一区二区 | 宝宝好涨水快流出来免费视频 | 成人一在线视频日韩国产 | 岛国片人妻三上悠亚 | 无码人妻黑人中文字幕 | 国产精品无码永久免费888 | 国产av一区二区精品久久凹凸 | 国产网红无码精品视频 | 99久久久无码国产aaa精品 | 亚洲国产一区二区三区在线观看 | 国产sm调教视频在线观看 | 久激情内射婷内射蜜桃人妖 | 久久99精品国产.久久久久 | 强伦人妻一区二区三区视频18 | 国产精品人人妻人人爽 | 国产麻豆精品精东影业av网站 | 欧美精品一区二区精品久久 | 欧美成人家庭影院 | 亚洲啪av永久无码精品放毛片 | 领导边摸边吃奶边做爽在线观看 | 国产麻豆精品一区二区三区v视界 | 澳门永久av免费网站 | 人妻少妇被猛烈进入中文字幕 | 国产乡下妇女做爰 | 99久久婷婷国产综合精品青草免费 | 久久99精品国产.久久久久 | 亚洲成av人在线观看网址 | 青青草原综合久久大伊人精品 | 牲交欧美兽交欧美 | 无遮挡国产高潮视频免费观看 | 男女作爱免费网站 | 成人试看120秒体验区 | 午夜精品一区二区三区的区别 | 无码帝国www无码专区色综合 | 一二三四社区在线中文视频 | 精品aⅴ一区二区三区 | 人妻中文无码久热丝袜 | 亚洲精品一区二区三区四区五区 | 国产超级va在线观看视频 | 大屁股大乳丰满人妻 | 成人一在线视频日韩国产 | 欧洲欧美人成视频在线 | 天堂一区人妻无码 | 亚洲娇小与黑人巨大交 | 亚洲国产精华液网站w | 九九久久精品国产免费看小说 | 精品久久久久香蕉网 | 波多野结衣一区二区三区av免费 | 精品偷拍一区二区三区在线看 | 久久精品国产亚洲精品 | 成人亚洲精品久久久久软件 | 青春草在线视频免费观看 | 98国产精品综合一区二区三区 | 人妻体内射精一区二区三四 | 亚洲自偷自拍另类第1页 | 久久熟妇人妻午夜寂寞影院 | 人妻夜夜爽天天爽三区 | 久久综合网欧美色妞网 | 麻豆md0077饥渴少妇 | 国产激情无码一区二区 | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲中文字幕成人无码 | 97资源共享在线视频 | 国内揄拍国内精品人妻 | 无遮挡国产高潮视频免费观看 | 成年女人永久免费看片 | a在线亚洲男人的天堂 | 成 人影片 免费观看 | 精品国偷自产在线视频 | 国产亚洲精品久久久久久大师 | 给我免费的视频在线观看 | 国产精品亚洲五月天高清 | 久久国产精品萌白酱免费 | 日韩亚洲欧美精品综合 | 任你躁国产自任一区二区三区 | 亚洲一区二区观看播放 | 性啪啪chinese东北女人 | 天堂无码人妻精品一区二区三区 | 国产精品人人爽人人做我的可爱 | 精品久久久久久亚洲精品 | 国产精品久久久午夜夜伦鲁鲁 | 捆绑白丝粉色jk震动捧喷白浆 | 亚洲人成网站在线播放942 | 丰满少妇女裸体bbw | 天干天干啦夜天干天2017 | 国产极品美女高潮无套在线观看 | 国产农村乱对白刺激视频 | 人人超人人超碰超国产 | 久久精品一区二区三区四区 | 国产精品高潮呻吟av久久4虎 | 国产另类ts人妖一区二区 | www国产亚洲精品久久网站 | 131美女爱做视频 | 久久精品国产一区二区三区肥胖 | 给我免费的视频在线观看 | 国产 精品 自在自线 | 免费观看又污又黄的网站 | 人人妻人人澡人人爽精品欧美 | a片免费视频在线观看 | 双乳奶水饱满少妇呻吟 | 亚洲日本va中文字幕 | 丝袜人妻一区二区三区 | 乱中年女人伦av三区 | 无码福利日韩神码福利片 | 荫蒂添的好舒服视频囗交 | 中文精品久久久久人妻不卡 | 国产成人精品三级麻豆 | 性史性农村dvd毛片 | 强伦人妻一区二区三区视频18 | 男人和女人高潮免费网站 | 美女黄网站人色视频免费国产 | 国产综合色产在线精品 | 久久综合激激的五月天 | 激情内射亚州一区二区三区爱妻 | 亚洲精品综合一区二区三区在线 | 日本www一道久久久免费榴莲 | 无码帝国www无码专区色综合 | 国产激情综合五月久久 | 久久久久久久久蜜桃 | 一本色道久久综合亚洲精品不卡 | 久久久久久国产精品无码下载 | 一本精品99久久精品77 | 99精品视频在线观看免费 | 人妻体内射精一区二区三四 | 免费观看又污又黄的网站 | 欧美午夜特黄aaaaaa片 | 中文亚洲成a人片在线观看 | 精品无码一区二区三区的天堂 | 一本无码人妻在中文字幕免费 | 99久久99久久免费精品蜜桃 | 老司机亚洲精品影院 | 亚洲日本va中文字幕 | 久久无码中文字幕免费影院蜜桃 | 亚洲精品一区三区三区在线观看 | 波多野结衣高清一区二区三区 | 国产激情综合五月久久 | 蜜臀av无码人妻精品 | 在线a亚洲视频播放在线观看 | 日韩亚洲欧美中文高清在线 | 在线看片无码永久免费视频 | 在线天堂新版最新版在线8 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美怡红院免费全部视频 | 青春草在线视频免费观看 | 亚洲综合无码久久精品综合 | 日日碰狠狠躁久久躁蜜桃 | 欧美兽交xxxx×视频 | aⅴ亚洲 日韩 色 图网站 播放 | 中文字幕精品av一区二区五区 | 国产成人无码av片在线观看不卡 | 大地资源网第二页免费观看 | 啦啦啦www在线观看免费视频 | 97色伦图片97综合影院 | 无码国模国产在线观看 | 色一情一乱一伦一视频免费看 | 亚洲性无码av中文字幕 | 国产香蕉尹人视频在线 | 久久午夜无码鲁丝片秋霞 | 在线亚洲高清揄拍自拍一品区 | 国产精品人人爽人人做我的可爱 | 欧美日韩久久久精品a片 | 国产精品无码一区二区三区不卡 | 国产人妻久久精品二区三区老狼 | 久久精品国产一区二区三区 | 国产欧美亚洲精品a | 久久天天躁狠狠躁夜夜免费观看 | 久久人人爽人人人人片 | 久久国产36精品色熟妇 | 国产成人无码av一区二区 | 亚洲 激情 小说 另类 欧美 | 国产情侣作爱视频免费观看 | 国产在线aaa片一区二区99 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产亚洲精品久久久久久久 | 免费观看黄网站 | 亚洲精品无码国产 | av人摸人人人澡人人超碰下载 | 国产亚洲精品久久久久久国模美 | 午夜福利电影 | av无码电影一区二区三区 | 色欲av亚洲一区无码少妇 | 天堂久久天堂av色综合 | 亚洲成a人片在线观看无码3d | 中文字幕av日韩精品一区二区 | 亚洲熟熟妇xxxx | 亚洲爆乳精品无码一区二区三区 | 蜜桃臀无码内射一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 99久久久国产精品无码免费 | 无码精品人妻一区二区三区av | 搡女人真爽免费视频大全 | 国产综合在线观看 | 国产精品无码mv在线观看 | 人人爽人人澡人人人妻 | 免费人成网站视频在线观看 | 四十如虎的丰满熟妇啪啪 | 国产亚洲美女精品久久久2020 | 久久久久se色偷偷亚洲精品av | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 无遮挡国产高潮视频免费观看 | 人人爽人人澡人人高潮 | 国产激情无码一区二区app | 疯狂三人交性欧美 | 亚洲精品美女久久久久久久 | 国模大胆一区二区三区 | 人人超人人超碰超国产 | 乱人伦人妻中文字幕无码久久网 | 青青青爽视频在线观看 | 欧美人与禽zoz0性伦交 | 亚洲精品久久久久中文第一幕 | 国产成人无码区免费内射一片色欲 | 少妇无码吹潮 | 国产区女主播在线观看 | 国产av无码专区亚洲awww | 最近免费中文字幕中文高清百度 | 国产激情精品一区二区三区 | 无码精品人妻一区二区三区av | 亚洲の无码国产の无码影院 | 亚洲国产欧美国产综合一区 | 亚洲精品中文字幕乱码 | 日本精品少妇一区二区三区 | 无码播放一区二区三区 | 成人欧美一区二区三区黑人 | 亚洲国产综合无码一区 | 午夜精品久久久久久久 | 国产激情无码一区二区app | 天天拍夜夜添久久精品 | 中文字幕人妻丝袜二区 | 无码人妻少妇伦在线电影 | 曰本女人与公拘交酡免费视频 | 蜜桃视频插满18在线观看 | 国产麻豆精品一区二区三区v视界 | 麻豆国产人妻欲求不满 | 亚洲一区av无码专区在线观看 | 国产成人无码区免费内射一片色欲 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲国产精华液网站w | 久久综合激激的五月天 | 免费观看激色视频网站 | 国产精品美女久久久网av | 丰满肥臀大屁股熟妇激情视频 | 丰腴饱满的极品熟妇 | 性色欲情网站iwww九文堂 | 亚洲の无码国产の无码影院 | 欧美老人巨大xxxx做受 | 久9re热视频这里只有精品 | 色综合久久中文娱乐网 | 久久亚洲中文字幕精品一区 | 免费看少妇作爱视频 | 无码人妻精品一区二区三区下载 | 久久国产精品萌白酱免费 | 亚洲色在线无码国产精品不卡 | 97久久超碰中文字幕 | 老司机亚洲精品影院无码 | 免费国产黄网站在线观看 | av无码不卡在线观看免费 | 波多野结衣乳巨码无在线观看 | 国产美女极度色诱视频www | 草草网站影院白丝内射 | 日本饥渴人妻欲求不满 | 人妻少妇精品无码专区二区 | 欧美xxxx黑人又粗又长 | 久久久无码中文字幕久... | 夜夜影院未满十八勿进 | 51国偷自产一区二区三区 | 强辱丰满人妻hd中文字幕 | 免费网站看v片在线18禁无码 | 成人无码视频在线观看网站 | 亚洲小说春色综合另类 | 亚洲人成无码网www | 日韩精品无码一本二本三本色 | 欧美人与物videos另类 | 人人妻人人澡人人爽欧美一区九九 | 天堂亚洲免费视频 | 自拍偷自拍亚洲精品10p | 亚洲国产欧美国产综合一区 | 国产真人无遮挡作爱免费视频 | 亚洲爆乳大丰满无码专区 | 国产手机在线αⅴ片无码观看 | 久久天天躁夜夜躁狠狠 | 国产高清不卡无码视频 | 亚洲一区二区三区偷拍女厕 | 亚洲精品国产精品乱码不卡 | 亚洲成色在线综合网站 | 久久精品视频在线看15 | 精品久久久中文字幕人妻 | 国产精品无码一区二区三区不卡 | 国产黄在线观看免费观看不卡 | 国内精品人妻无码久久久影院蜜桃 | 在线精品亚洲一区二区 | 97se亚洲精品一区 | 18精品久久久无码午夜福利 | 日韩精品成人一区二区三区 | а√天堂www在线天堂小说 | 国产69精品久久久久app下载 | 高潮毛片无遮挡高清免费 | 国产人成高清在线视频99最全资源 | 大肉大捧一进一出视频出来呀 | 国产精品久久久一区二区三区 | 亚洲gv猛男gv无码男同 | a在线观看免费网站大全 | www一区二区www免费 | 国产精品无码mv在线观看 | 巨爆乳无码视频在线观看 | 中文字幕乱码亚洲无线三区 | 色五月五月丁香亚洲综合网 | 国产另类ts人妖一区二区 | 无码免费一区二区三区 | 久久天天躁狠狠躁夜夜免费观看 | 玩弄人妻少妇500系列视频 | 久久99精品久久久久久动态图 | 熟妇人妻激情偷爽文 | 成人aaa片一区国产精品 | 在线播放免费人成毛片乱码 | 国产精品视频免费播放 | 福利一区二区三区视频在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 99久久99久久免费精品蜜桃 | 少妇性l交大片欧洲热妇乱xxx | 国精品人妻无码一区二区三区蜜柚 | 特黄特色大片免费播放器图片 | 在线亚洲高清揄拍自拍一品区 | 成人欧美一区二区三区 | 99精品久久毛片a片 | 久久99国产综合精品 | 国产亚洲视频中文字幕97精品 | 精品国产麻豆免费人成网站 | 四虎永久在线精品免费网址 | 久久精品人妻少妇一区二区三区 | 国产内射老熟女aaaa | 亚洲国精产品一二二线 | 性史性农村dvd毛片 | 亚洲精品国产精品乱码视色 | 欧美真人作爱免费视频 | 97资源共享在线视频 | 日韩欧美中文字幕在线三区 | 小泽玛莉亚一区二区视频在线 | 国产精品亚洲综合色区韩国 | 老子影院午夜伦不卡 | 国产疯狂伦交大片 | 澳门永久av免费网站 | 国产三级久久久精品麻豆三级 | 欧美肥老太牲交大战 | 99riav国产精品视频 | 久久久中文久久久无码 | 最近免费中文字幕中文高清百度 | 在线欧美精品一区二区三区 | 性欧美熟妇videofreesex | 狠狠躁日日躁夜夜躁2020 | 人人超人人超碰超国产 | 欧美日韩一区二区三区自拍 | 亚洲一区二区三区无码久久 | 中文字幕无码日韩专区 | 亚欧洲精品在线视频免费观看 | 狠狠躁日日躁夜夜躁2020 | 99久久精品日本一区二区免费 | 国产一区二区三区四区五区加勒比 | 欧洲熟妇色 欧美 | 黑人巨大精品欧美黑寡妇 | 两性色午夜免费视频 | 色一情一乱一伦一视频免费看 | 精品国产麻豆免费人成网站 | 久久精品国产大片免费观看 | 亚洲中文字幕在线观看 | 牲欲强的熟妇农村老妇女 | 在线视频网站www色 | 国产9 9在线 | 中文 | 奇米影视888欧美在线观看 | 丰满岳乱妇在线观看中字无码 | 激情综合激情五月俺也去 | 午夜无码人妻av大片色欲 | 欧美三级a做爰在线观看 | 成在人线av无码免费 | 麻豆蜜桃av蜜臀av色欲av | 伊人久久大香线蕉午夜 | 国产成人精品久久亚洲高清不卡 | 亚洲欧美国产精品专区久久 | 国产亚洲精品久久久闺蜜 | 在线欧美精品一区二区三区 | 国产极品视觉盛宴 | 欧洲熟妇精品视频 | 波多野结衣乳巨码无在线观看 | 国产精品内射视频免费 | 国产亚洲精品精品国产亚洲综合 | 亚洲成av人片天堂网无码】 | 国产成人无码a区在线观看视频app | 国产97人人超碰caoprom | 亚洲精品成a人在线观看 | 老子影院午夜伦不卡 | 少妇无码一区二区二三区 | aⅴ亚洲 日韩 色 图网站 播放 | 国产人妻精品一区二区三区不卡 | 东京热男人av天堂 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲国产欧美国产综合一区 | 国产乱人伦av在线无码 | 三级4级全黄60分钟 | 日日噜噜噜噜夜夜爽亚洲精品 | 最新国产乱人伦偷精品免费网站 | 亚洲精品综合五月久久小说 | 国产免费观看黄av片 | 好爽又高潮了毛片免费下载 | 成人欧美一区二区三区黑人 | 学生妹亚洲一区二区 | 无码人中文字幕 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 女人被男人躁得好爽免费视频 | 中文字幕乱妇无码av在线 | 动漫av网站免费观看 | 夜夜高潮次次欢爽av女 | 麻豆成人精品国产免费 | 少妇人妻av毛片在线看 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产精品a成v人在线播放 | 国产欧美亚洲精品a | 九一九色国产 | 亚洲а∨天堂久久精品2021 | 久久精品成人欧美大片 | 欧美zoozzooz性欧美 | www一区二区www免费 | 人妻aⅴ无码一区二区三区 | 少妇人妻大乳在线视频 | 国产成人亚洲综合无码 | 人妻天天爽夜夜爽一区二区 | 婷婷色婷婷开心五月四房播播 | 黑人巨大精品欧美黑寡妇 | 国产精品久久久 | 扒开双腿吃奶呻吟做受视频 | 九九在线中文字幕无码 | 国产黄在线观看免费观看不卡 | 色五月五月丁香亚洲综合网 | 亚洲欧洲日本综合aⅴ在线 | 国产精品自产拍在线观看 | 日日碰狠狠丁香久燥 | 国产精华av午夜在线观看 | 亚洲七七久久桃花影院 | 少妇愉情理伦片bd | 精品偷自拍另类在线观看 | 午夜时刻免费入口 | 啦啦啦www在线观看免费视频 | 性色欲情网站iwww九文堂 | 国产av无码专区亚洲a∨毛片 | 人妻aⅴ无码一区二区三区 | 婷婷丁香六月激情综合啪 | 性欧美牲交在线视频 | 双乳奶水饱满少妇呻吟 | 亚洲午夜福利在线观看 | 18禁止看的免费污网站 | 撕开奶罩揉吮奶头视频 | 久久久久久亚洲精品a片成人 | 水蜜桃色314在线观看 | 99国产欧美久久久精品 | 精品国产青草久久久久福利 | 国产办公室秘书无码精品99 | 一本色道婷婷久久欧美 | 色综合久久久久综合一本到桃花网 | 亚洲一区av无码专区在线观看 | 亚洲小说春色综合另类 | 国产黑色丝袜在线播放 | 亚洲精品午夜国产va久久成人 | 亚洲中文字幕av在天堂 | 99久久婷婷国产综合精品青草免费 | 午夜精品久久久久久久 | 国产精品久久久久无码av色戒 | 日本一区二区三区免费播放 | 精品乱子伦一区二区三区 | 久久综合网欧美色妞网 | 中文字幕乱码人妻二区三区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产卡一卡二卡三 | 国产精品久久久久久久9999 | 福利一区二区三区视频在线观看 | 欧洲精品码一区二区三区免费看 | 黄网在线观看免费网站 | 国产真实夫妇视频 | 无码午夜成人1000部免费视频 | 精品国产成人一区二区三区 | 天堂在线观看www | 欧美亚洲国产一区二区三区 | 亚洲国产精品美女久久久久 | 少妇无套内谢久久久久 | 亚洲国产精品成人久久蜜臀 | 日本一卡2卡3卡四卡精品网站 | 亚洲自偷自拍另类第1页 | 成 人 免费观看网站 | 成人无码影片精品久久久 | 久久久精品人妻久久影视 | 日日麻批免费40分钟无码 | 免费中文字幕日韩欧美 | 成年女人永久免费看片 | 亚洲国产精品久久久久久 | 亚洲午夜无码久久 | 欧美日韩综合一区二区三区 | 又粗又大又硬又长又爽 | 熟妇人妻激情偷爽文 | 人妻体内射精一区二区三四 | 久久99久久99精品中文字幕 | 国产网红无码精品视频 | 日日干夜夜干 | 九九热爱视频精品 | 无码人妻丰满熟妇区毛片18 | 天下第一社区视频www日本 | 国产片av国语在线观看 | 99re在线播放 | 久久无码专区国产精品s | 国产三级久久久精品麻豆三级 | 欧美阿v高清资源不卡在线播放 | 中文字幕亚洲情99在线 | 亚洲男人av天堂午夜在 | 色婷婷av一区二区三区之红樱桃 | 内射巨臀欧美在线视频 | 少妇性荡欲午夜性开放视频剧场 | 小sao货水好多真紧h无码视频 | 亚洲aⅴ无码成人网站国产app | 国产精品久久久久久亚洲毛片 | 久久人人爽人人爽人人片av高清 | 日产国产精品亚洲系列 | 国产人成高清在线视频99最全资源 | 熟妇女人妻丰满少妇中文字幕 | 国产精品欧美成人 | 成人免费无码大片a毛片 | 国产亚洲人成a在线v网站 | 国产精品久久久久7777 | 午夜嘿嘿嘿影院 | 国产人成高清在线视频99最全资源 | 日韩精品a片一区二区三区妖精 | 天天拍夜夜添久久精品大 | 人人澡人摸人人添 | 少妇人妻偷人精品无码视频 | 天天摸天天透天天添 | 国产性生交xxxxx无码 | 国产日产欧产精品精品app | 亚洲s码欧洲m码国产av | 午夜不卡av免费 一本久久a久久精品vr综合 | 99精品国产综合久久久久五月天 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚洲成av人片在线观看无码不卡 | 激情五月综合色婷婷一区二区 | 无码成人精品区在线观看 | 亚洲国产精品无码一区二区三区 | 中文字幕乱码人妻二区三区 | 欧美freesex黑人又粗又大 | 国产无遮挡又黄又爽免费视频 | 亚洲欧洲无卡二区视頻 | 一本精品99久久精品77 | 熟妇女人妻丰满少妇中文字幕 | 人妻少妇精品无码专区动漫 | 成人无码视频免费播放 | 日日碰狠狠躁久久躁蜜桃 | 在线а√天堂中文官网 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 曰韩无码二三区中文字幕 | 大色综合色综合网站 | 天堂а√在线地址中文在线 | 极品尤物被啪到呻吟喷水 | 久久精品人人做人人综合试看 | 亚洲无人区一区二区三区 | av无码不卡在线观看免费 | 亚洲中文字幕无码中文字在线 | 精品国产青草久久久久福利 | 无码精品国产va在线观看dvd | 欧洲vodafone精品性 | 在线播放亚洲第一字幕 | 欧美 日韩 亚洲 在线 | 国产xxx69麻豆国语对白 | 自拍偷自拍亚洲精品10p | 一本无码人妻在中文字幕免费 | 少妇一晚三次一区二区三区 | 国产人成高清在线视频99最全资源 | 午夜不卡av免费 一本久久a久久精品vr综合 | 牲欲强的熟妇农村老妇女视频 | 成人亚洲精品久久久久 | 亚洲国产精品久久久久久 | 欧美 日韩 亚洲 在线 | 欧美乱妇无乱码大黄a片 | 在线欧美精品一区二区三区 | 女人和拘做爰正片视频 | 成 人 免费观看网站 | 国产精品嫩草久久久久 | 国产九九九九九九九a片 | 人妻体内射精一区二区三四 | 自拍偷自拍亚洲精品10p | 中文字幕亚洲情99在线 | 亚洲日韩中文字幕在线播放 | 国产热a欧美热a在线视频 | 亚洲综合无码久久精品综合 | 天天av天天av天天透 | 一二三四在线观看免费视频 | 高清国产亚洲精品自在久久 | 国产精品亚洲综合色区韩国 | 特级做a爰片毛片免费69 | 免费人成网站视频在线观看 | 澳门永久av免费网站 | 骚片av蜜桃精品一区 | 任你躁国产自任一区二区三区 | 欧美日韩精品 | 国产福利视频一区二区 | 日本高清一区免费中文视频 | 欧美成人家庭影院 | 97久久精品无码一区二区 | 亚洲精品一区国产 | 装睡被陌生人摸出水好爽 | 日本精品人妻无码免费大全 | 久9re热视频这里只有精品 | 99视频精品全部免费免费观看 | 久久久精品成人免费观看 | 久久成人a毛片免费观看网站 | аⅴ资源天堂资源库在线 | 荫蒂被男人添的好舒服爽免费视频 | 精品无码av一区二区三区 | 少妇的肉体aa片免费 | 亚洲 a v无 码免 费 成 人 a v | 18精品久久久无码午夜福利 | 又粗又大又硬又长又爽 | 狠狠综合久久久久综合网 | 亚洲a无码综合a国产av中文 | 97精品国产97久久久久久免费 | 无码纯肉视频在线观看 | 国产超级va在线观看视频 | 99精品视频在线观看免费 | 人妻少妇精品久久 | 在线看片无码永久免费视频 | 免费人成在线观看网站 | 国产av久久久久精东av | 亚洲精品久久久久中文第一幕 | 青青草原综合久久大伊人精品 | 亚洲精品国产品国语在线观看 | 天堂在线观看www | 亚洲区欧美区综合区自拍区 | 狠狠色色综合网站 | 国产成人精品视频ⅴa片软件竹菊 | 国产sm调教视频在线观看 | 亚洲国产av美女网站 | 久久亚洲日韩精品一区二区三区 | 亚洲а∨天堂久久精品2021 | 精品人妻人人做人人爽 | 亚洲熟妇色xxxxx欧美老妇 | 色偷偷人人澡人人爽人人模 | 婷婷五月综合激情中文字幕 | 日韩 欧美 动漫 国产 制服 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久精品视频在线看15 | 中文字幕无码日韩专区 | 特黄特色大片免费播放器图片 | а√天堂www在线天堂小说 | 露脸叫床粗话东北少妇 | 亚洲国产精品一区二区美利坚 | 中文字幕中文有码在线 | 国产精品.xx视频.xxtv | 亚洲伊人久久精品影院 | 18精品久久久无码午夜福利 | 欧美自拍另类欧美综合图片区 | 国产午夜精品一区二区三区嫩草 | 四虎影视成人永久免费观看视频 | 亲嘴扒胸摸屁股激烈网站 | 亚洲综合精品香蕉久久网 | 无码免费一区二区三区 | 色一情一乱一伦一视频免费看 | 人人澡人人妻人人爽人人蜜桃 | 装睡被陌生人摸出水好爽 | 亚洲国产精品毛片av不卡在线 | 亚洲s色大片在线观看 | 亚洲毛片av日韩av无码 | 亚洲自偷自拍另类第1页 | 亚洲の无码国产の无码步美 | 无码人妻少妇伦在线电影 | 国产精品高潮呻吟av久久4虎 | 国产成人综合色在线观看网站 | 草草网站影院白丝内射 | 天天拍夜夜添久久精品 | 无码国内精品人妻少妇 | 国产欧美精品一区二区三区 | 亚洲自偷精品视频自拍 | 熟女少妇在线视频播放 | 亚洲色大成网站www国产 | 国产三级久久久精品麻豆三级 | 亚洲国产欧美日韩精品一区二区三区 | 妺妺窝人体色www婷婷 | 乱人伦中文视频在线观看 | 国产成人无码一二三区视频 | 午夜性刺激在线视频免费 | 国产精品久久国产精品99 | 又粗又大又硬又长又爽 | 无码人妻丰满熟妇区毛片18 | 久久久久av无码免费网 | 亚洲自偷自拍另类第1页 | 最近中文2019字幕第二页 | 高潮喷水的毛片 | 久久国产精品二国产精品 | av无码久久久久不卡免费网站 | 亚洲人成网站在线播放942 | 帮老师解开蕾丝奶罩吸乳网站 | 成人亚洲精品久久久久 | 熟妇女人妻丰满少妇中文字幕 | 巨爆乳无码视频在线观看 | 丝袜人妻一区二区三区 | 色诱久久久久综合网ywww | 国产女主播喷水视频在线观看 | 全球成人中文在线 | 对白脏话肉麻粗话av | 亚洲热妇无码av在线播放 | 青青青爽视频在线观看 | 精品水蜜桃久久久久久久 | 亚洲熟熟妇xxxx | 88国产精品欧美一区二区三区 | 少妇性荡欲午夜性开放视频剧场 | 精品亚洲韩国一区二区三区 | 久久久久成人精品免费播放动漫 | 高潮毛片无遮挡高清免费视频 | 中文字幕中文有码在线 | 亚洲国产综合无码一区 | 国产精品久久久久久久9999 | 国内丰满熟女出轨videos | 国产一区二区三区影院 | 97精品国产97久久久久久免费 | 天天做天天爱天天爽综合网 | 欧美人与禽猛交狂配 | 偷窥日本少妇撒尿chinese | 天堂а√在线地址中文在线 | 日韩欧美成人免费观看 | 男女性色大片免费网站 | 亚洲日韩av一区二区三区中文 | 亚洲中文字幕无码中文字在线 | 国产激情艳情在线看视频 | 少妇被黑人到高潮喷出白浆 | 色综合视频一区二区三区 | 国产精品第一区揄拍无码 | 四虎国产精品一区二区 | 日韩精品无码一区二区中文字幕 | 在线亚洲高清揄拍自拍一品区 | 久久国产自偷自偷免费一区调 | 无码午夜成人1000部免费视频 | 黑人粗大猛烈进出高潮视频 | 国产成人无码区免费内射一片色欲 | 无套内射视频囯产 | 国产精品久久久一区二区三区 | 黑人粗大猛烈进出高潮视频 | www国产精品内射老师 | 亚洲熟悉妇女xxx妇女av | 天海翼激烈高潮到腰振不止 | 蜜桃视频插满18在线观看 | 极品尤物被啪到呻吟喷水 | 国产成人综合色在线观看网站 | 色噜噜亚洲男人的天堂 | 国产精品久久久久久无码 | 亚洲中文字幕在线观看 | 精品无码成人片一区二区98 | 精品日本一区二区三区在线观看 | 国产乱子伦视频在线播放 | 国产av剧情md精品麻豆 | 小sao货水好多真紧h无码视频 | 欧美日韩在线亚洲综合国产人 | 老头边吃奶边弄进去呻吟 | 永久免费精品精品永久-夜色 | 久久久久久av无码免费看大片 | 中文精品无码中文字幕无码专区 | 草草网站影院白丝内射 | 亚洲熟妇色xxxxx亚洲 | 免费乱码人妻系列无码专区 | 熟妇人妻激情偷爽文 | 十八禁视频网站在线观看 | 夜夜高潮次次欢爽av女 | 国产人妻久久精品二区三区老狼 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 成人一区二区免费视频 | 性色欲网站人妻丰满中文久久不卡 | 小sao货水好多真紧h无码视频 | 国内精品一区二区三区不卡 | 国产精品99爱免费视频 | 亚洲精品国产精品乱码视色 | 午夜时刻免费入口 | 亚洲精品一区二区三区在线观看 | 夜夜高潮次次欢爽av女 | 久久久久久久久蜜桃 | 久久精品国产大片免费观看 | 欧美怡红院免费全部视频 | 日韩精品乱码av一区二区 | 亚洲第一网站男人都懂 | 高潮毛片无遮挡高清免费视频 | 国产绳艺sm调教室论坛 | 成 人 免费观看网站 | 在线欧美精品一区二区三区 | 国产免费观看黄av片 | 大地资源中文第3页 | 在线观看国产一区二区三区 | 丰满妇女强制高潮18xxxx | 中文字幕无码视频专区 | 欧美熟妇另类久久久久久多毛 | 国产精品亚洲а∨无码播放麻豆 | 老司机亚洲精品影院 | 精品人人妻人人澡人人爽人人 | 福利一区二区三区视频在线观看 |