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

基于MINA構建高性能的NIO應用

開發 后端
MINA是非常好的C/S架構的java服務器,這里轉了一篇關于它的使用感受。

MINA是非常好的C/S架構的java服務器,這里轉了一篇關于它的使用感受。

前  言

MINA是Trustin Lee最新制作的Java通訊框架。通訊框架的主要作用是封裝底層IO操作,提供高級的操作API。比較出名的通訊框架有C++的ACE、Python的Twisted,而Java的通訊框架還有QuickServer、Netty2、Cindy、Grizzly等。

2004年6月,Trustin Lee發布了一個通訊框架Netty2,是Java界第一個事件模型架構的通訊框架,Cindy也從中借鑒了不少思想。由于Netty2的架構不是很好,Trustin Lee在2004年底加入Apache Directory組之后,重寫了整個框架,取名為MINA。MINA是一個基于Java NIO的通訊框架,Java從1.4開始引入NIO,提供了一個非阻塞、高性能的IO底層。

目前使用MINA的產品并不是很多,比較出名的就有Apache Directory、Openfire(Jive出品的一個XMPP產品)、red5(研究flash流媒體flv技術的朋友應該很清楚這個東西,adobe fms的競爭者,國內也有視頻網站在使用)等等。

筆者在07年初的時候,公司新項目需要用Java實現一個Socket Server,對比了Netty2、Cindy、QuickServer和MINA。當時Netty2已經停止開發,也找不到官方網站和代碼,比較了另外三個框架之后,毅然選擇了當時文檔比較缺乏和使用群較少的MINA,一年以來的使用經驗來看,感覺還是很不錯的,MINA有著清晰的架構,很方便做自定義的擴充。在1.0發布之后,官方網站充實了很多,增加了不少文檔,也聽到越來越多的朋友開始使用MINA。后來專門針對JDK 1.5發布了1.1的版本,使用JDK內置的concurrent代替backport-util-concurrent。目前1.0和1.1同時存在,但已經不再增加新功能,僅僅發布bug fix的版本,新功能都在2.0中實現,2.0調整了架構,性能有更大的提升,目前還在開發中。

基本特性

通過Java NIO支持TCP和UDP協議,另外還支持RS232和VM內通訊。由于MINA有清晰的架構,你也能很簡單地實現一個底層網絡協議。目前不支持阻塞IO,似乎還沒有計劃支持,當然你可以在其之上實現一個阻塞的模型,不過按照筆者的經驗來說,非阻塞IO更適合Server端編程。

一個類似ServletFilter的過濾器模型。這是筆者認為MINA的精髓所在,通過引入過濾器模型,可以將一些非業務的功能獨立開來,層次更清晰,很有AOP的思想,可以很方便地進行日志、協議轉換、壓縮等等功能,還能在運行中動態增加或去掉功能。

可以直接使用底層的ByteBuffer,也可以使用用戶定義的消息Object和編碼方式。

高度可定制的線程模型,單線程、一個線程池,或者類似SEDA的多個線程池。

SSL支持,攻擊防御和流量控制,mock測試友好,JMX支持,Spring集成,你還需要更多嗎。

一個簡單的例子

MINA使用非常簡單,筆者以前做過一段時間傳統的Java Socket開發,不過一直對Java NIO不是很理解,但是MINA很快就上手了,MINA封裝了NIO繁瑣的部分,使你可以更專注于業務功能實現。話不多說,讓我們來看一個簡單的例子,一個很常見的例子,時間服務器。

我們的實現目標是一個能響應多個客戶端的請求,然后返回服務器當前的系統時間的功能。傳統的Java Socket程序,我們需要每accept一個客戶端連接,就創建一個新的線程來響應,這會令到系統整體負載能力有較大的限制,而且我們必須手工編寫連接管理等代碼。讓我們來看看MINA是怎么處理的。

首先我們從官方網站下載MINA 1.1,這里我們假設JDK為1.5以上的版本,如果你使用的是JDK 1.4,請下載MINA 1.0,MINA 1.0跟1.1幾乎一樣,但是強烈建議使用JDK 1.5以上以獲得更好的性能。

解開壓縮包之后,能看見很多jar包,這里暫不介紹每個包的具體作用,可以把所有包都導入項目。值得留意的是MINA使用了一個slf4j的日志庫,該日志庫大有取締common-logging之勢。 這里是我們的主程序,非常簡單。

首先我們需要一個IoAcceptor,這里我們選擇了一個SocketAcceptor,也就是TCP協議。

然后,我們給應用加上日志過濾器和協議編碼過濾器。

最后,我們把acceptor bind到本機的8123端口,并且使用TimeServerHandler來實現協議。

TimeServerHandler是我們實現具體業務功能的地方。 IoHandlerAdapter提供了7個事件方法,我們要做的事情僅僅是挑選我們需要做出響應的事件進行重載。在我這個例子了,我重載了兩個方法。sessionCreated會在客戶端連接的時候調用,通常我們會在這里進行一些初始化操作,我這里僅僅是打印一條信息。messageReceived就是整個Handler的中心部分,每一個從客戶端發過來的消息都會轉化成對該方法的調用。由于我們加入了協議編碼過濾器,因此這里獲得的Object msg是一個String,而不是默認的ByteBuffer(下文會詳細介紹ProtocolCodecFilter)。這里我們實現了一個很簡單的業務功能,如果用戶輸入的是quit,就斷開連接,否則就輸入當前時間。可以看出,IoSession封裝了對當前連接的操作。

至此,我們就實現了一個時間服務器。

  1. public class TimeServer {   
  2. public static void main(String[] args) throws IOException {   
  3. IoAcceptor acceptor = new SocketAcceptor();   
  4. SocketAcceptorConfig cfg = new SocketAcceptorConfig();   
  5. cfg.getFilterChain().addLast( "logger"new LoggingFilter() );   
  6. cfg.getFilterChain().addLast( "codec"new ProtocolCodecFilter( new TextLineCodecFactory()));   
  7. acceptor.bind( new InetSocketAddress(8123), new TimeServerHandler(), cfg);   
  8. System.out.println("Time server started.");   
  9. }  
  1. public class TimeServerHandler extends IoHandlerAdapter {   
  2.  public void messageReceived(IoSession session, Object msg) throws Exception {   
  3.  String str = (String) msg;   
  4.  if"quit".equalsIgnoreCase(str) ) {   
  5.  session.close();   
  6.  return;   
  7.  }   
  8.  
  9.  Date date = new Date();   
  10.  session.write( date.toString() );   
  11.  System.out.println("Message written...");   
  12.  }   
  13.    
  14.  public void sessionCreated(IoSession session) throws Exception {   
  15.  System.out.println("Session created...");   
  16.  }   

MINA架構

這里,我借用了一張Trustin Lee在Asia 2006的ppt里面的圖片來介紹MINA的架構。

Remote Peer就是客戶端,而下方的框是MINA的主要結構,各個框之間的箭頭代表數據流向。

大家可以對比剛剛的例子來看這個架構圖,IoService就是整個MINA的入口,負責底層的IO操作,客戶端發過來的消息就是由它處理。剛剛我們使用的IoAcceptor就是一個IoService,之所以抽象成IoService,是因為MINA用同樣的架構來處理服務器和客戶端編程,IoService的另一個子類就是IoConnector,用于客戶端。不過根據筆者的使用經驗,使用非阻塞的模型進行客戶端編程非常的不方便,你最好尋求其他的阻塞通訊框架。

IoService把數據轉化成一個一個的事件,傳遞給IoFilterChain。你可以加入一連串的IoFilter,進行各種功能。筆者的建議是將一些功能性的,業務不相關的代碼,用IoFilter來實現,使得整個應用結構更清晰,也方便代碼重用。

被IoFilter處理過的事件,發送給 IoHandler,然后我們在這里實現具體的業務邏輯。這個部分很簡單,如果你有Swing的使用經驗的話,你會發現它跟Swing的事件非常相像,你要做的事情,僅僅是重載你需要的方法,然后編寫具體的業務功能。在這其中,最重要的一個方法就是messageReceived了。

值得留意的是一個IoSession的類,每一個IoSession實例代表這一個連接,我們需要對連接進行的任何操作都通過這個類來實現。

從IoHandler通過調用IoSession.write等方法向客戶端發送的消息,會通過跟輸入數據相反的次序依次傳遞,直至由IoService負責把數據發送給客戶端。

這就已經是MINA的全部,是不是很簡單。

接下來,我會詳細介紹我們編寫具體代碼的時候主要涉及到的三個類,IoHandler、IoSession和IoFilter。

IoHandler

MINA的內部實現了一個事件模型,而IoHanlder則是所有事件最終產生響應的位置。每一個方法的名字很明確表明該事件的含義。messageReceived是接收客戶端消息的事件,我們應該在這里實現業務邏輯。messageSent是服務器發送消息的事件,一般情況下我們不會使用它。sessionClosed是客戶端斷開連接的事件,可以在這里進行一些資源回收等操作。值得留意的是,客戶端連接有兩個事件,sessionCreated和sessionOpened,兩者稍有不同,sessionCreated是由I/O processor線程觸發的,而sessionOpened在其后,由業務線程觸發的,由于MINA的I/O processor線程非常少,因此如果我們真的需要使用sessionCreated,也必須是耗時短的操作,一般情況下,我們應該把業務初始化的功能放在sessionOpened事件中。

細心的讀者可能會發現,我們剛剛的例子繼承的是IoHandlerAdapter,IoHandlerAdapter其實就是一個IoHanlder的空的實現,這樣我們就可以不用重載不感興趣的事件。

IoSession

IoSession是一個接口,MINA里很多的地方都使用接口,很好地體現了面向接口編程的思想。它提供了對當前連接的操作功能,還有用戶定義屬性的存儲功能,這點非常重要。IoSession是線程安全的,也就是我們能夠在多線程環境中隨意操作IoSession,這點給開發帶來很大的好處。我們來看看具體提供的方法,筆者列舉一些比較常用和重要的方法

在這里,筆者把IoSession的方法大致分成三類

第一類,連接操作功能。

最主要的方法有兩個,向客戶端發送消息和斷開連接。可以看的出,write接受的變量是一個Object,但是實際上應該傳入什么類型呢?具體還得看你是否使用了ProtocolCodecFilter(下面會詳細介紹),如果使用了ProtocolCodecFilter,那這個message將可能是一個String,或者是一個用戶定義的JavaBean。默認的情況,message是一個ByteBuffer。ByteBuffer是MINA的一個類,跟java.nio.ByteBuffer類同名,MINA 2.0將會將它改成IoBuffer,以避免討論上的誤會。

另一個值得留意的是Future類,MINA是一個非阻塞的通信框架,其中一個明顯的體現就是調用IoSession.write方法是不會阻塞的。用戶調用了write方法之后,消息內容會發到底層等候發送,至于什么時候發出,就不得而知了。當然,實際上調用了write之后,數據幾乎是立刻發出的,這得益與NIO的高性能。但是,如果我們必須確認了消息發出,然后進行某些處理,我們就需要使用Future類,以下是一個很常見的代碼。

通過調用future.join,程序就會阻塞,直至消息處理結束。我們還能通過future.isWritten得知消息是否成功發送。

在這里,筆者順便說一個實際使用的發現,消息發送是會自動合并的,簡單來說,如果在很短的時間里,對同一個IoSession進行了兩次write操作,客戶端有可能只收到一條消息,而這條消息就是服務器發出的兩條消息前后接起來。這樣的設計可以在高并發的時候節省網絡開銷,而筆者的實際使用過程中,效果也相當好。但是如果這樣行為會導致客戶端工作不正常,你也可以通過參數關閉它。

第二類,屬性存儲操作。

通常來說,我們的系統是有用戶狀態的,我們就需要在連接上存儲用戶屬性,IoSession的Attribute就是這樣一個功能。例如兩個連接同時連入服務器,一個連接是用戶A,用戶ID是13,另一個連接是用戶B,用戶ID是14,我們就可以在用戶登錄成功之后,調用IoSession.setAttribute(“login_id”,13),然后在其后的操作中,通過IoSession.getAttribute(“login_id”)獲得當前登錄用戶ID,并進行相應的操作。簡單來說,就是一個類似HttpSession的功能,當然具體的實現方法不一樣。

第三類,連接狀態。

這里就不多說了,從方法名上我們就能知道它具體的功能。

IoFilter

過濾器是MINA的一個很重要的功能。IoFilter也是一個接口,但是相對比較復雜,這里就不列舉它的方法了。簡單來說IoFilter就像ServletFilter,在事件被IoHandler處理之前或之后進行一些特定的操作,但是它比ServletFilter復雜,可以處理很多種事件,除了包括IoHandler的7個事件以外,還有一些內部的事件可以進行操作。

MINA提供了一些常用的IoFilter實現,例如有LoggingFilter(日志功能)、BlacklistFilter(黑名單功能)、CompressionFilter(壓縮功能)、SSLFilter(SSL支持),這些過濾器比較簡單,通過閱讀它們的源代碼,能夠更進一步理解過濾器的實現。筆者在這里要重點介紹兩個過濾器,ProtocolCodecFilter和ExecutorFilter

ProtocolCodecFilter

網絡傳輸的內容其實本質是一個二進制流,但是我們的業務功能不會,或者說不應該去直接操作二進制流。MINA默認向IoHandler傳入的message是一個ByteBuffer,如果我們直接在IoHandler操作ByteBuffer,會導致大量協議分析的代碼和實際的業務代碼混雜在一起。最適合的做法,就是在IoFilter把ByteBuffer轉換成String或者JavaBean,ProtocolCodecFilter正是這樣的一個功能的過濾器。

使用ProtocolCodecFilter很簡單,我們只要把ProtocolCodecFilter加入到FilterChain就可以了,但是我們需要提供一個ProtocolCodecFactory。其實ProtocolCodecFilter僅僅是實現了過濾器部分的功能,它會將最終的轉換工作,交給從ProtocolCodecFactory獲得的Encode和Decode。如果我們需要編寫自己的ProtocolCodec,就應該從ProtocolCodecFactory入手。MINA內置了幾個ProtocolCodecFactory,比較常用的就是ObjectSerializationCodecFactory和TextLineCodecFactory。

ObjectSerializationCodecFactory是Java Object序列化之后的內容直接跟ByteBuffer互相轉化,比較適合兩端都是Java的情況使用。TextLineCodecFactory就是String跟ByteBuffer的轉化,說白了就是文本,例如你要實現一個SMTP服務器,或者POP服務器,就可以使用它。而筆者的實際使用,大多數情況都是使用

TextLineCodecFactory

這里提及一下IoFilter的順序問題,IoFilter是有加入順序的,例如,先加入LoggingFilter再加入ProtocolCodecFilter,和先加入ProtocolCodecFilter再加入LoggingFilter的效果是不一樣的,前者LoggingFilter寫入日志的內容是ByteBuffer,而后者寫入日志的是轉換后具體的類,例如String。實際使用的時候,一定要處理好過濾器的順序。

ExecutorFilter

另一個重要的過濾器就是ExecutorFilter。這里,我需要先說明一下MINA的線程工作模式,MINA默認是單線程處理所有客戶端的消息,也就是說,即使你在一臺8CPU的機器上面跑,可能也只用到一個CPU,另外,如果某次消息處理太耗時,就會導致其他消息等待,整體的吞吐量下降。很多朋友抱怨MINA的性能差,其實是因為他們沒有加入ExecutorFilter的緣故。ExecutorFilter設計的很精巧,大家可以仔細閱讀一下源代碼,它會將同一個連接的消息合并起來按順序調用,不會出現兩個線程同時處理同一個連接的情況。

  1. 1.IoAcceptor acceptor = ...;   
  2. 2.IoServiceConfig acceptorConfig = acceptor.getDefaultConfig();   
  3. 3.acceptorConfig.setThreadModel(ThreadModel.MANUAL); 

這里再次提及IoFitler的順序問題,一般情況下,我們會將ExecutorFilter放在ProtocolCodecFilter之后,因為我們不需要多線程地執行ProtocolCodec操作,用單一線程來進行ProtocolCodec性能會比較高,而具體的業務邏輯可能還設計數據庫操作,因此更適合放在不同的線程中運行。

優化指南

MINA默認配置的性能并不是很高的,部分原因是MINA目前還保留初期版本的架構,另外一個原因是因為JVM的發展。

1.IoAcceptor acceptor = new SocketAcceptor(Runtime.getRuntime().availableProcessors() + 1, Executors.newCachedThreadPool());
首先我們關閉默認的ThreadModel設置 ThreadModel是一個很簡單的線程實現,用于IoService。但是它實在太弱,以至于在并發環境產生大量問題。在MINA 2.0中,ThreadModel直接被取消。你應該使用ExecutorFilter來實現線程。

  1. acceptor.getDefaultConfig().getFilterChain().addLast("threadPool"new ExecutorFilter(Executors.newCachedThreadPool()); 

然后我們增加I/O處理線程

每一個Acceptor/Connector都使用一個線程來處理連接,然后把連接發送給I/O processor進行讀寫操作,我們只可以修改I/O processor使用的線程數,用以下代碼設置 當然是要將ExecutorFilter加入,上文已經很詳細地描述了 筆者在開發過程中,多次遇到OutOfMemoryError,經過研究之后才發現原因。MINA默認是使用direct memory實現ByteBuffer池的方案(以下簡稱direct buffer),通過JNI在內存開辟一段空間來使用,該方案在早期的MINA版本中是一個非常好的特性,那是因為MINA開發初期,JVM并沒有現在的強大,帶有池效果的direct buffer性能比較好。但是當我們使用-Xms -Xmx等指令增加JVM可使用的內存,那僅僅增加了堆的內存空間,而direct memory的空間并沒有增加,導致MINA實際使用的時候經常出現OutOfMemoryError。如果你的確想使用direct memory,可以通過-XX:MaxDirectMemorySize選項來設置。不過筆者不建議這樣做,因為最新的測試表明,在現代的JVM里面,direct memory比堆的表現更差。這里可能有讀者會覺得奇怪,為什么不用池,而要用堆呢,而且還需要gc。那是因為現在的JVM gc能力已經很強了,而且在并發環境里面,pool的同步也是一個性能的問題。我們可以通過這樣的代碼進行設置 MINA 2.0已經默認把直接內存分配改成堆,為了提供最好的性能和穩定性。

  1. ByteBuffer.setUseDirectBuffers(false);   
  2. ByteBuffer.setAllocator(new SimpleByteBufferAllocator()); 

最后一條優化技巧就是,把你的應用部署在Linux上,并且打開Java NIO使用Linux epoll的功能。可能你還沒聽過epoll,但是你應該聽過Lighttpd、Nginx、Squid等,得益于epoll,它們提供很高的網絡性能,還占用非常少的系統資源。JDK6已經默認把epoll配置打開,因此筆者建議把你的應用部署在JDK6上面,也同時因為JDK6還有別的優化特性。如果你的應用必須部署在JDK5上,你也可以通過參數把epoll支持打開。

原文鏈接:http://blog.csdn.net/chenyi8888/article/details/5341916

【編輯推薦】

  1. Java NIO如何處理慢速的連接
  2. Java NIO2 AIO開發核心流程
  3. Java NIO開發實例
  4. Java NIO 聊天室實例
  5. 多線程NIO客戶端實例
責任編輯:林師授 來源: chenyi8888的博客
相關推薦

2009-06-03 14:24:12

ibmdwWebSphere

2025-02-05 12:09:12

2023-10-26 08:35:53

2023-12-26 00:58:53

Web應用Go語言

2016-05-20 14:20:31

ASP.NET建議

2023-09-04 14:52:48

2011-03-11 09:51:47

Java NIO

2023-07-12 08:24:19

Java NIO通道

2012-02-14 14:10:16

ibmdw

2020-06-05 07:20:41

測試自動化環境

2023-09-04 08:32:43

web開發圖像

2024-12-27 09:37:51

2022-12-09 08:40:56

高性能內存隊列

2011-10-21 14:20:59

高性能計算HPC虛擬化

2011-10-25 13:13:35

HPC高性能計算Platform

2009-11-30 09:40:23

Java 7 NIO2HTTP Server

2025-03-04 08:00:00

機器學習Rust開發

2025-06-03 08:15:00

微服務架構異步任務隊列

2009-10-29 09:11:50

Juniper高性能網絡

2023-12-01 07:06:14

Go命令行性能
點贊
收藏

51CTO技術棧公眾號

亚洲精品国产无码| 91插插插影院| 国产片在线观看| 六月丁香综合在线视频| 欧美理论片在线观看| 无码人妻精品一区二区三区99不卡| av不卡高清| 久久久99精品免费观看| 国产在线播放不卡| 日本三级2019| 色777狠狠狠综合伊人| 日韩欧美中文字幕精品| 青青草原成人网| 一级毛片视频在线| 不卡av电影在线播放| 国产精品视频大全| 精品在线视频免费| 久久精品国产99久久| 亚洲第一视频网站| 福利视频999| 最近在线中文字幕| 亚洲精品视频免费观看| 欧美高清性xxxxhdvideosex| 国产一区二区麻豆| 久久国产福利| 欧美激情综合色| 日日操免费视频| 日本精品影院| 日韩精品最新网址| 天天操,天天操| 深夜福利视频一区二区| 亚洲精品国产一区二区三区四区在线 | 国产精品美女网站| 国偷自拍第113页| 国产一区清纯| 久久视频在线视频| 国产黄色录像视频| 美女少妇全过程你懂的久久 | 91sao在线观看国产| xxxx日本少妇| 日韩中文在线电影| 伊人久久久久久久久久久久久| 欧美xxxx×黑人性爽| 国产精品国产亚洲精品| 欧美日韩国产一二三| 九色porny91| 深夜成人福利| 日韩欧美高清视频| 大陆极品少妇内射aaaaa| 日本aa在线| 亚洲综合999| 国产小视频免费| 尤物视频在线看| 亚洲精品国产成人久久av盗摄| 熟妇熟女乱妇乱女网站| 久草免费在线| 亚洲女女做受ⅹxx高潮| 欧美日韩一区二区三区电影| 好了av在线| 亚洲精品视频在线观看网站| 亚洲国产精品女人| av在线导航| 亚洲综合色区另类av| 热久久最新网址| 女子免费在线观看视频www| 一区二区三区中文字幕电影| 黄色激情在线视频| 国内激情视频在线观看| 日韩欧美一区二区三区久久| 亚洲中文字幕久久精品无码喷水| 日韩av电影资源网| 欧美人与禽zozo性伦| 午夜福利123| 1313精品午夜理伦电影| 亚洲国产另类久久精品| 能免费看av的网站| 日韩欧美一区免费| 久久成人精品一区二区三区| 欧美日韩免费做爰视频| 一本色道久久综合亚洲精品高清 | 国产福利不卡视频| 国产高清自拍99| 清纯唯美亚洲色图| 国产精品久久久久久久久免费桃花| 一区二区精品在线观看| 欧洲在线视频| 欧美性xxxxxxx| 亚洲精品久久久久久宅男| 亚洲国产高清在线观看| 亚洲精品美女网站| 91麻豆制片厂| 亚洲国产国产亚洲一二三| 国产91亚洲精品| 国产男男gay体育生网站| 成人动漫视频在线| 日韩视频专区| 男女免费观看在线爽爽爽视频| 日韩欧美国产免费播放| 亚洲欧美日韩一二三区| 少妇精品导航| 欧美成人在线影院| 成年人av网站| 成人综合在线观看| 亚洲在线不卡| 国产传媒在线| 欧美一区二区三区免费在线看| 色呦呦一区二区| 永久亚洲成a人片777777| 日本国产一区二区三区| 精品久久久久成人码免费动漫| 久久久精品天堂| 97超碰在线视| 欧美性www| 亚洲欧美国产精品va在线观看| 麻豆一区在线观看| 在线综合亚洲| 999日本视频| 你懂的视频在线免费| 亚洲一二三四区| 五月激情五月婷婷| 国产麻豆一区二区三区精品视频| 欧美激情免费视频| 国产又粗又猛又黄又爽无遮挡| 91老司机福利 在线| 日本xxxxx18| 老司机精品视频网| 亚洲色图第一页| 国产无人区码熟妇毛片多| 韩国成人精品a∨在线观看| 热re99久久精品国产99热| 国产福利在线免费观看| 日韩一区二区视频在线观看| 免费看一级黄色| 日日夜夜精品视频天天综合网| 成人自拍爱视频| 在线免费观看污| 在线不卡的av| 殴美一级黄色片| 日本中文在线一区| 日韩欧美精品一区二区| 欧洲av不卡| 亚洲欧美一区二区三区情侣bbw | 香港三日本8a三级少妇三级99| 欧美在线资源| 18成人免费观看网站下载| 米奇精品一区二区三区| 精品视频1区2区3区| 受虐m奴xxx在线观看| 久久国产精品99国产| 欧美日韩亚洲在线| 91精品产国品一二三产区| 亚洲精选一区二区| 亚洲成人第一网站| 久久一区二区三区四区| 日韩av一二三四| 欧美综合在线视频观看| 国产精品久久久久av免费| 超碰免费在线| 欧美老肥妇做.爰bbww| 色老板免费视频| 国产精品538一区二区在线| 最近免费观看高清韩国日本大全| 天堂av一区| 国内精品久久久久久久久| 污视频网站免费观看| 欧美午夜精品久久久久久久| 丰满少妇一区二区| 日本午夜精品视频在线观看 | 日本精品免费观看高清观看| 成人无码av片在线观看| 久久99精品国产麻豆婷婷洗澡| 91嫩草国产丨精品入口麻豆| 亚洲一区二区三区在线免费 | 亚洲欧美一二三| 视频一区中文字幕精品| 66m—66摸成人免费视频| 国产精品ⅴa有声小说| 欧美精品777| 动漫精品一区一码二码三码四码| 97久久精品人人做人人爽| 国产三级日本三级在线播放| 日韩欧美综合| 国产亚洲第一区| 在线观看精品| 美女啪啪无遮挡免费久久网站| 日本精品久久久久久| 一本大道久久a久久综合婷婷| 青青草自拍偷拍| 成人高清视频免费观看| www.四虎成人| 欧美黄污视频| 欧美最大成人综合网| 少妇精品视频在线观看| 性亚洲最疯狂xxxx高清| 男人影院在线观看| 日韩电影在线观看永久视频免费网站| 亚洲精品国产精品乱码视色| 亚洲一区免费在线观看| 亚洲图片第一页| av电影在线观看完整版一区二区| 久草福利视频在线| 亚洲毛片一区| 正在播放91九色| 窝窝社区一区二区| 51成人做爰www免费看网站| 欧美日韩美女| 久久久久久香蕉网| 久做在线视频免费观看| 亚洲乱码av中文一区二区| www.蜜臀av| 欧美日韩一级二级| 99超碰在线观看| 亚洲一级电影视频| 久久99久久99精品免费看小说| 91色九色蝌蚪| 影音先锋资源av| 国产在线视频不卡二| 婷婷丁香激情网| 蘑菇福利视频一区播放| aa视频在线播放| 欧美1区免费| 亚洲午夜精品一区二区| 久久av免费| 久久av免费观看| 国产精品xxx在线观看| 成人免费福利在线| 国产精品4hu.www| 国产成人综合精品在线| 色在线视频观看| 69av视频在线播放| h片在线观看视频免费免费| 欧美另类交人妖| 国产在线高潮| 久青草国产97香蕉在线视频| 8888四色奇米在线观看| 亚洲一级免费视频| 精品99又大又爽又硬少妇毛片| 亚洲精品456在线播放狼人| 成人免费一级视频| 日韩色视频在线观看| 国产日产亚洲系列最新| 欧美乱妇15p| 97人妻一区二区精品免费视频| 欧美视频精品在线| 中文字幕日产av| 欧美日本一区二区| 国产麻豆免费观看| 欧美一区二区三区在线看 | 亚洲成人国产精品| 亚洲精品18p| 精品国产乱子伦一区| 欧美一级在线免费观看| 亚洲国产精品嫩草影院久久| 手机看片一区二区三区| 日韩av中文字幕在线| 午夜视频1000| 亚洲欧洲在线观看| 成年人在线观看网站| 中文字幕亚洲欧美一区二区三区| 97视频精彩视频在线观看| 日韩在线中文字| 中文字幕免费高清电视剧网站在线观看| 欧美另类极品videosbest最新版本 | 99精品视频在线播放观看| 日韩片在线观看| 久久精品一区二区三区不卡| 国产三级在线观看完整版| 国产精品久久久久永久免费观看 | 亚洲午夜激情av| 97久久久久久久| 在线视频欧美精品| 国产又粗又猛又黄又爽| 精品对白一区国产伦| 男女网站在线观看| 综合激情国产一区| 国产乱妇乱子在线播视频播放网站| 777午夜精品福利在线观看| 性欧美超级视频| 成人av在线天堂| 亚洲天堂中文字幕在线观看| 你懂的视频在线一区二区| 日本在线电影一区二区三区| 九一免费在线观看| 香蕉成人久久| 岛国毛片在线播放| 成人性生交大片免费看中文 | 久久久久久久久综合| 性感美女一区二区在线观看| 91深夜福利视频| 自拍偷拍欧美一区| 黄色a级在线观看| 国产欧美一区二区三区国产幕精品| 男操女免费网站| 成人午夜在线免费| 性爱在线免费视频| 亚洲成年人影院| 亚洲综合网av| 日韩精品免费综合视频在线播放| 在线视频91p| 羞羞色国产精品| 精品久久国产一区| 欧美在线视频二区| 国产一区二区中文| 精品日韩久久久| eeuss影院一区二区三区| 国产黄色录像片| 欧美色视频日本版| 国产成人精品亚洲精品色欲| 亚洲性猛交xxxxwww| 日韩电影免费观看| 成人a在线视频| 久草成人资源| 美脚丝袜脚交一区二区| 久久国产精品区| 青娱乐国产视频| 欧美日韩国产精品一区| 国产高清第一页| 日韩色av导航| 影视一区二区三区| 久久精品国产美女| 国产一区亚洲| 一级淫片在线观看| 中文文精品字幕一区二区| 精品91久久久| 亚洲成人av中文字幕| 香蕉成人app免费看片| 国产精品揄拍500视频| 国产一区二区在线| 黄色片久久久久| 99久久综合精品| 国产一级特黄毛片| 日韩免费性生活视频播放| 国产成人在线视频免费观看| 国产欧美久久一区二区| re久久精品视频| 男女啪啪网站视频| 国产色一区二区| 国产乡下妇女三片| 亚洲天堂av在线免费观看| 一个人www视频在线免费观看| 国产呦系列欧美呦日韩呦| 黄色欧美日韩| 国产免费a级片| 亚洲国产精品久久久久婷婷884| 精品久久久久成人码免费动漫| 美日韩精品视频免费看| 欧洲精品99毛片免费高清观看 | 亚洲区免费视频| 精品美女久久久久久免费| 天天干天天色天天| 97久久精品人搡人人玩| 美腿丝袜亚洲图片| 日本免费黄视频| 久久亚洲影视婷婷| 黄色片视频免费| 综合136福利视频在线| 成人豆花视频| 欧美日韩dvd| 99久久久精品| 日韩精品成人免费观看视频| 亚洲一区二区黄| 欧美xxxx网站| 在线观看av的网址| 暴力调教一区二区三区| 天堂网视频在线| 色青青草原桃花久久综合| 欧美成年网站| 91视频最新入口| 中文av一区二区| 国产口爆吞精一区二区| 欧美国产精品va在线观看| 欧洲亚洲成人| 亚洲天堂2018av| 亚洲精品高清在线| 日韩亚洲视频在线观看| 国产美女久久久| 欧美破处大片在线视频| 中文在线永久免费观看| 欧美视频精品在线| 国产偷倩在线播放| 日韩免费电影一区二区| 国产剧情在线观看一区二区| 精品成人免费视频| 综合激情国产一区| 国产精品2023| 色多多视频在线播放| 玉米视频成人免费看| 亚州视频一区二区三区| 国产精品久久久久久久久久久久久| 2023国产精品久久久精品双| 国产+高潮+白浆+无码| 欧美在线视频你懂得| 在线观看男女av免费网址| 欧美激情第一页在线观看| 韩国午夜理伦三级不卡影院| 久久夜色精品亚洲| 久久综合久久美利坚合众国| 蜜桃久久久久| 91性高潮久久久久久久| 一本到一区二区三区|