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

一篇文章帶你了解Netty

開發 前端
Grizzly是一種應用程序框架,專門解決編寫成千上萬用戶訪問服務器時候產生的各種問題。使用JAVA NIO作為基礎,并隱藏其編程的復雜性。

Netty

傳統的IO模型的web容器,比如老版本的Tomcat,為了增加系統的吞吐量,需要不斷增加系統核心線程數量,或者通過水平擴展服務器數量,來增加系統處理請求的能力。有了NIO之后,一個線程即可處理多個連接事件,其中基于多路復用模型的Netty框架,不僅降低了使用NIO的復雜度,

優點

Netty是一款以java NIO為基礎,基于事件驅動模型支持異步、高并發的網絡應用框架。

  • API使用簡單,開發門檻低,簡化了NIO開發網絡程序的復雜度
  • 功能強大,預置多種編解碼功能,支持多種主流協議,比如Http、WebSocket。
  • 定制能力強,可以通過ChannelHandler對通信框架靈活擴展。
  • 性能高,支持異步非阻塞通信模型
  • 成熟穩定,社區活躍,已經修復了Java NIO所有的Bug。
  • 經歷了大規模商業應用的考驗,質量有保證。

Reactor模型

Reactor模型也叫做反應器設計模式,是一種為處理服務請求并發提交到一個或者多個服務處理器的事件設計模式。

而Netty是基于Reactor模型設計的一套高性能網絡應用框架,下面來看下常見的Reactor模型有哪些:

一、單Reactor單線程

1)可以實現通過一個阻塞對象監聽多個鏈接請求

2)Reactor對象通過select監聽客戶端請求事件,通過dispatch進行分發

3)如果是建立鏈接請求,則由Acceptor通過accept處理鏈接請求,然后創建一個Handler對象處理完成鏈接后的各種事件

4)如果不是鏈接請求,則由Reactor分發調用鏈接對應的Handler來處理

5)Handler會完成Read->業務處理->send的完整業務流程

圖片

二、單Reactor多線程

1)Reactor對象通過select監聽客戶端請求事件,收到事件后,通過dispatch分發

2)如果是建立鏈接請求,則由Acceptor通過accept處理鏈接請求,然后創建一個Handler對象處理完成鏈接后的各種事件

3)如果不是鏈接請求,則由Reactor分發調用鏈接對應的Handler來處理

4)Handler只負責事件響應不做具體業務處理

5)通過read讀取數據后,分發到worker線程池處理,處理完成后返回給Handler,Handler收到后,通過send將結果返回給client

圖片

三、主從Reactor多線程

1)Reactor主線程MainReactor對象通過select監聽鏈接事件,通過Acceptor處理

2)當Acceptor處理鏈接事件后,MainReactor將鏈接分配給SubReactor

3)SubReactor將鏈接加入到隊列進行監聽,并創建Handler進行事件處理

4)當有新事件發生時,SubReactor就會調用對應的Handler處理

5)Handler通過read讀取數據,分發到worker線程池處理,處理完成后返回給Handler,Handler收到后,通過send將結果返回給client

6)Reactor主線程可以對應多個Reactor子線程

圖片

三種模式用生活案例來理解:

1)單Reactor單線程,前臺接待員和服務員是同一個人,全程為顧客服務

2)單Reactor多線程,1個前臺接待員,多個服務員,接待員只負責接待

3)主從Reactor多線程,多個前臺接待員,多個服務員

Reactor模型具有如下優點:

1)響應快,不必為單個同步事件所阻塞,雖然Reactor本身依然是同步的

2)可以最大程度的避免復雜的多線程及同步問題,并且避免了多線程/進程的切換開銷

3)擴展性好,可以方便的通過增加Reactor實例個數來充分利用CPU資源

4)復用性好,Reactor模型本身與具體事件處理邏輯無關,具有很高的復用性

核心組件

Bootstrap
一個Netty應用通常由一個Bootstrap開始,它主要作用是配置整個Netty程序,串聯起各個組件。

Handler
為了支持各種協議和處理數據的方式,便誕生了Handler組件。Handler主要用來處理各種事件,這里的事件很廣泛,比如可以是連接、數據接收、異常、數據轉換等。

ChannelInboundHandler
一個最常用的Handler。這個Handler的作用就是處理接收到數據時的事件,也就是說,我們的業務邏輯一般就是寫在這個Handler里面的,ChannelInboundHandler就是用來處理我們的核心業務邏輯。

ChannelInitializer
當一個鏈接建立時,我們需要知道怎么來接收或者發送數據,當然,我們有各種各樣的Handler實現來處理它,那么ChannelInitializer便是用來配置這些Handler,它會提供一個ChannelPipeline,并把Handler加入到ChannelPipeline。

ChannelPipeline
一個Netty應用基于ChannelPipeline機制,這種機制需要依賴于EventLoop和EventLoopGroup,因為它們三個都和事件或者事件處理相關。

EventLoops
目的是為Channel處理IO操作,一個EventLoop可以為多個Channel服務。EventLoopGroup由多個EventLoop組成。

Channel
代表了一個Socket鏈接,或者其它和IO操作相關的組件,它和EventLoop一起用來參與IO處理。

Future
在Netty中所有的IO操作都是異步的,因此,你不能立刻得知消息是否被正確處理,但是我們可以過一會等它執行完成或者直接注冊一個監聽,具體的實現就是通過Future和ChannelFutures,他們可以注冊一個監聽,當操作執行成功或失敗時監聽會自動觸發。

示例

下面通過一個簡單的示例,了解怎么基于Netty如何開發一個簡單的網絡通信程序。和之前一樣,包含服務端與客戶端:

Server:

@Slf4j
public class Server {

    private EventLoopGroup boosGroup;

    private EventLoopGroup workGroup;

    public Server(int port){
        try {
            init(port);
            log.info("----- 服務啟動成功 -----");
        } catch (InterruptedException e) {
            log.error("啟動服務出錯:{}", e.getCause());
        }
    }

    private void init(int port) throws InterruptedException {
        // 處理連接
        this.boosGroup = new NioEventLoopGroup();
        // 處理業務
        this.workGroup = new NioEventLoopGroup();

        ServerBootstrap bootstrap = new ServerBootstrap();
        // 綁定
        bootstrap.group(boosGroup, workGroup)
                .channel(NioServerSocketChannel.class) //配置服務端
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000)
                .option(ChannelOption.SO_BACKLOG, 1024)
                .childOption(ChannelOption.TCP_NODELAY, true)
                .childOption(ChannelOption.SO_RCVBUF, 1024)
                .childOption(ChannelOption.SO_SNDBUF, 1024)
                .childHandler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel socketChannel) throws Exception {
                        socketChannel.pipeline().addLast(new ServerHandler());
                    }
                });

        ChannelFuture channelFuture = bootstrap.bind(port).sync();
        channelFuture.channel().closeFuture().sync();
    }

    public void close(){
        this.boosGroup.shutdownGracefully();
        this.workGroup.shutdownGracefully();
    }

}

@Slf4j
class ServerHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        log.info(">>>>>>> server active");
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        //1. 讀取客戶端的數據(緩存中去取并打印到控制臺)
        ByteBuf buf = (ByteBuf) msg;
        byte[] request = new byte[buf.readableBytes()];
        buf.readBytes(request);
        String requestBody = new String(request, "utf-8");
        log.info(">>>>>>>>> receive message: {}", requestBody);

        //2. 返回響應數據
        ctx.writeAndFlush(Unpooled.copiedBuffer((requestBody+" too").getBytes()));
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        super.exceptionCaught(ctx, cause);
    }
}

Client:

@Slf4j
public class Client {

    private EventLoopGroup workGroup;
    private ChannelFuture channelFuture;

    public Client(int port){
        init(port);
    }

    private void init(int port){
        this.workGroup = new NioEventLoopGroup();

        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(workGroup)
                .channel(NioSocketChannel.class)
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 3000)
                .option(ChannelOption.SO_RCVBUF, 1024)
                .option(ChannelOption.SO_SNDBUF, 1024)
                .handler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel socketChannel) throws Exception {
                        socketChannel.pipeline().addLast(new ClientHandler());
                    }
                });

        this.channelFuture = bootstrap.connect("127.0.0.1", port).syncUninterruptibly();
    }

    /**
     *
     * @param message
     */
    public void send(String message){
        this.channelFuture.channel().writeAndFlush(Unpooled.copiedBuffer(message.getBytes()));
    }

    /**
     *
     */
    public void close(){
        try {
            channelFuture.channel().closeFuture().sync();
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        workGroup.shutdownGracefully();
    }
}

@Slf4j
class ClientHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        log.info(">>>>>>> client active");
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        try {
            ByteBuf buf = (ByteBuf) msg;
            byte[] req = new byte[buf.readableBytes()];
            buf.readBytes(req);

            String body = new String(req, "utf-8");
            log.info(">>>>>>>>> receive message: {}", body);
        } finally {
            ReferenceCountUtil.release(msg);
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        super.exceptionCaught(ctx, cause);
    }
}

測試:

public class StarterTests {

    static int port = 9011;

    @Test
    public void startServer(){
        Server server = new Server(9011);
    }

    @Test
    public void startClient(){
        Client client = new Client(port);
        client.send("Hello Netty!");
        while (true){}
    }

}

主要實現步驟:

1、創建兩個NIO線程組,一個專門用來網絡事件處理(接受客戶端連接),另一個則進行網絡通訊讀寫

2、創建一個ServerBootstrap對象,配置Netty的一系列參數,例如接收傳入數據的緩存大小等。

3、創建一個實際處理數據的類ChannelInitializer,進行初始化的準備工作,比如設置傳入數據的字符集格式,實現具體處理數據的接口。

4、綁定端口,執行同步阻塞方法等待服務器啟動即可

類似技術

Mina、Netty、Grizzly

1、Mina

Mina(Multipurpose Infrastructure for Network Applications) 是 Apache 組織一個較新的項目,它為開發高性能和高可用性的網絡應用程序提供了非常便利的框架。當前發行的 Mina 版本2.04支持基于 Java NIO 技術的 TCP/UDP 應用程序開發、串口通訊程序,Mina 所支持的功能也在進一步的擴展中。

目前,正在使用Mina的應用包括:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、 Openfire等等。

2、Netty

Netty是一款異步的事件驅動的網絡應用框架和工具,用于快速開發可維護的高性能、高擴展性協議服務器和客戶端。也就是說,Netty是一個NIO客戶端/服務器框架,支持快速、簡單地開發網絡應用,如協議服務器和客戶端。它極大簡化了網絡編程,如TCP和UDP套接字服務器。

3、Grizzly

Grizzly是一種應用程序框架,專門解決編寫成千上萬用戶訪問服務器時候產生的各種問題。使用JAVA NIO作為基礎,并隱藏其編程的復雜性。容易使用的高性能的API。帶來非阻塞socketd到協議處理層。利用高性能的緩沖和緩沖管理使用高性能的線程池。

從設計的理念上來看,Mina的設計理念是最為優雅的。當然,由于Netty的主導作者與Mina的主導作者是同一人,出自同一人之手的Netty在設計理念上與Mina基本上是一致的。而Grizzly在設計理念上就較差了點,幾乎是JavaNIO的簡單封裝。

結束語

前面我們說到了各種IO模型,基于Java NIO開發的網絡應用程序,能夠更好的基于服務器操作系統底層支持,更好的利用服務器資源提供高性能、可靠易擴展的應用。而Netty在Java NIO的基礎上,為開發這提供便捷提升開發的效率與穩定性,在很多主流的框架中都有被使用,比如Dubbo、Spring Webflux等

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2021-06-30 00:20:12

Hangfire.NET平臺

2023-05-08 08:21:15

JavaNIO編程

2021-03-09 14:04:01

JavaScriptCookie數據

2021-09-27 09:18:30

ListIterato接口方法

2021-01-26 23:46:32

JavaScript數據結構前端

2024-01-30 13:47:45

2023-07-30 15:18:54

JavaScript屬性

2021-02-26 20:01:57

SVG濾鏡元素

2021-05-18 08:30:42

JavaScript 前端JavaScript時

2023-09-06 14:57:46

JavaScript編程語言

2024-04-19 14:23:52

SwitchJavaScript開發

2021-06-24 09:05:08

JavaScript日期前端

2021-03-05 18:04:15

JavaScript循環代碼

2020-12-08 08:09:49

SVG圖標Web

2021-02-02 18:39:05

JavaScript

2021-01-29 18:41:16

JavaScript函數語法

2021-06-04 09:56:01

JavaScript 前端switch

2020-11-10 10:48:10

JavaScript屬性對象

2024-08-16 15:44:53

JavaScriptWhile循環

2023-07-06 14:40:38

點贊
收藏

51CTO技術棧公眾號

日韩亚洲国产欧美| 视频在线亚洲| 国产精品免费网站在线观看| 国产欧美中文字幕| 久艹视频在线观看| 欧美jizz19性欧美| 欧美日韩一区二区在线观看视频 | 欧美高清在线视频| 91在线无精精品一区二区| 国产一级片免费观看| 九九久久成人| 日韩精品一区二区三区在线观看| www.浪潮av.com| 999在线视频| 成人sese在线| 国产欧美日韩91| 国产小视频在线免费观看| 一区二区三区四区在线看| 在线播放国产精品二区一二区四区| 国产精品久久久久久久乖乖| av网站在线免费播放| 波多野结衣一区二区三区 | 日批视频免费在线观看| 91成人超碰| 亚洲人成网在线播放| 极品人妻一区二区| av激情成人网| 午夜欧美2019年伦理| 黄频视频在线观看| 韩日在线视频| 99久久久国产精品| 91在线在线观看| 91国产免费视频| 老司机免费视频久久| 色综合久久中文字幕综合网小说| 秋霞网一区二区三区| 亚洲人成网www| 精品动漫一区二区三区在线观看| 毛片毛片毛片毛| 成人高清一区| 欧美影院精品一区| 日av中文字幕| 在线天堂中文资源最新版| 午夜影院在线观看欧美| 91精品国产毛片武则天| 日本天堂在线观看| 国产精品视频麻豆| 四虎影视永久免费在线观看一区二区三区| 天天综合网在线观看| 成人一区二区三区视频| 96国产粉嫩美女| 国产亲伦免费视频播放| 精品一区二区三区免费毛片爱 | 美女国产精品久久久| 欧美少妇一区二区| 日本va中文字幕| 欧美xxxx做受欧美护士| 在线精品视频免费观看| 成人免费无码av| 久久精品女人天堂av免费观看 | 欧美国产一区二区三区| 青青草激情视频| 午夜精品亚洲| 欧美丰满少妇xxxx| 国产在线观看你懂的| 欧美精品aa| 欧美黑人巨大xxx极品| 国产亚洲小视频| 在线亚洲国产精品网站| 91av在线免费观看视频| 久久国产黄色片| 天堂一区二区在线| 国产精品久久久久久久久久ktv| 国语对白做受69按摩| 日日夜夜精品免费视频| 国产精品一二三在线| 国产麻豆一精品一男同| 国产成人精品免费一区二区| 国产亚洲欧美另类一区二区三区| 色视频在线观看福利| 国产亚洲欧美日韩在线一区| 亚洲乱码一区二区三区三上悠亚| 免费黄网站在线| 亚洲一区二区黄色| 青青草原成人网| abab456成人免费网址| 欧美精品久久久久久久久老牛影院| 蜜桃福利午夜精品一区| 哺乳一区二区三区中文视频| 亚洲精美色品网站| 国精产品一区二区三区| 五月天久久久| 性金发美女69hd大尺寸| 国产成人精品亚洲| 高清在线观看日韩| 欧美日韩一区二区三| 久久99精品久久久久久野外| 亚洲国产日韩一级| 亚洲精品高清无码视频| 日韩欧美久久| 亚洲视频在线免费观看| 成人在线观看高清| 噜噜噜在线观看免费视频日韩| 国产精品三级网站| 日本成人动漫在线观看| 欧美韩国日本综合| 丁香六月激情婷婷| 欧美电影在线观看网站| 亚洲精品国产福利| 欧美日韩午夜视频| 久久中文精品| 成人欧美一区二区| 二区在线观看| 欧美日韩免费在线| 日韩欧美中文视频| 欧美天天综合| 欧美亚洲第一页| 精品国产av一区二区| 国产亚洲欧美一区在线观看| 日韩欧美猛交xxxxx无码| 超薄肉色丝袜脚交一区二区| 亚洲精品电影网站| 久草福利资源在线观看| 蜜臀av国产精品久久久久| 久久99精品久久久久久久久久| 国内外激情在线| 欧美亚洲一区二区在线| 国产精品伦子伦| 国产在线欧美| 3d蒂法精品啪啪一区二区免费| 国产视频二区在线观看| 精品日本高清在线播放| 99精品一区二区三区无码吞精 | www.99热这里只有精品| 日韩精品中文字幕一区二区| 久久精品国产2020观看福利| 五月婷婷激情五月| 久久综合九色欧美综合狠狠| 久久精品xxx| 精品一区二区三区在线观看视频| 一区二区欧美亚洲| 欧美日韩一级黄色片| 99re这里只有精品6| 加勒比成人在线| 51精品国产| 欧美老女人xx| 国产不卡精品视频| 亚洲欧美一区二区三区极速播放 | 菠萝蜜视频在线观看一区| 亚洲天堂第一区| 伊人久久一区| 成年无码av片在线| 精品欧美在线观看| 一区二区三区中文字幕精品精品| 午夜激情视频网| 天天综合国产| 91国产丝袜在线放| 污污网站在线看| 精品999久久久| 日本熟妇乱子伦xxxx| 91在线你懂得| 毛葺葺老太做受视频| 黄色不卡一区| 国产日产亚洲精品| 最新黄网在线观看| 精品福利二区三区| 日本一本在线观看| 国产精品麻豆99久久久久久| 红桃视频 国产| 欧美成人一品| 久久久久九九九| 日韩经典一区| 久久精品国亚洲| 亚洲av综合色区无码一二三区| 亚洲国产精品天堂| 四虎影成人精品a片| 美女爽到高潮91| 91传媒免费视频| 日韩精品社区| 国产精品视频自在线| 最爽无遮挡行房视频在线| 亚洲精品99999| 欧美成人精品网站| 一区二区三区在线观看视频| 中文字幕日韩三级片| 免费观看在线色综合| 艳母动漫在线观看| 久久悠悠精品综合网| 国产精品久久久av久久久| а天堂中文在线官网| 日韩av中文字幕在线| 夜夜躁很很躁日日躁麻豆| 一区二区三区欧美久久| 亚洲区免费视频| 国产精品一区二区在线看| 9久久9毛片又大又硬又粗| 精品一二三区| 国产一区二区不卡视频在线观看| 欧美日韩五码| 欧美高清视频免费观看| 成人精品一区二区| 精品va天堂亚洲国产| 一级片视频免费| 精品国产乱码久久久久久虫虫漫画| 一级特黄曰皮片视频| 成人黄色av电影| 天堂av8在线| 亚洲在线电影| 中文字幕日韩精品无码内射| 国产videos久久| 国产高清自拍一区| 免费一区二区三区四区| 97视频免费看| 羞羞视频在线免费国产| 日日狠狠久久偷偷四色综合免费| 日本高清视频免费看| 欧美一级夜夜爽| 影音先锋国产资源| 91国产免费观看| 一区二区三区视频免费看| 亚洲男同1069视频| 337人体粉嫩噜噜噜| 91在线播放网址| 日本天堂在线播放| 国产精品影视在线| 手机av在线网| 免费成人你懂的| 一本久道综合色婷婷五月| 日韩香蕉视频| 国产免费黄色一级片| 欧美成人精品| 在线视频一二三区| 亚洲欧美色图| 椎名由奈jux491在线播放| 日韩精品一区二区久久| 日韩欧美在线一区二区| 综合综合综合综合综合网| 国产亚洲精品美女久久久m| 99ri日韩精品视频| 99久久久精品免费观看国产 | 24小时免费看片在线观看| 欧美国产中文字幕| 男女免费观看在线爽爽爽视频| 久久综合久久八八| а√天堂8资源在线官网| 精品国产欧美成人夜夜嗨| 日本不卡不卡| 久久网福利资源网站| av免费在线网站| 欧美人与性动交| aa国产成人| 97人人爽人人喊人人模波多 | 综合色一区二区| 91精品国产毛片武则天| 欧美日韩亚洲一区三区| 日韩视频在线视频| 国产精品女主播一区二区三区| 国产美女无遮挡网站| 国产美女一区| 91热这里只有精品| 久久国内精品视频| 肉色超薄丝袜脚交| 成人自拍视频在线观看| www.免费av| 国产欧美一区二区三区在线看蜜臀| 黄色av免费播放| 自拍偷拍亚洲综合| 久艹视频在线观看| 懂色av一区二区三区| 波多野结衣 久久| 欧美精品777| 老牛影视av牛牛影视av| 亚洲男人天堂网| 免费av网站在线观看| 久久久久久久香蕉网| 成人短视频app| 成人精品aaaa网站| 北条麻妃在线一区二区免费播放 | 国产sm在线观看| 91亚洲精品一区二区乱码| 国产美女永久免费无遮挡| 亚洲人被黑人高潮完整版| 日本一区二区三区四区五区| 欧美中文字幕一区二区三区亚洲| 国产又粗又黄又爽| 亚洲电影免费观看高清完整版在线观看 | 日韩精品视频免费看| 91久久国产最好的精华液| 国产又黄又粗又猛又爽| 亚洲精品suv精品一区二区| 巨骚激情综合| 欧美激情综合亚洲一二区 | 欧美性三三影院| 亚洲AV无码国产精品午夜字幕| 亚洲美女久久久| gogo在线观看| 国产精品久久综合av爱欲tv| 91精品导航| 亚洲午夜精品福利| aⅴ色国产欧美| 麻豆精品国产传媒| 国产亚洲精品福利| 久久精品视频国产| 欧美日韩另类一区| 久青草国产在线| 韩国视频理论视频久久| 日韩一级视频| 欧美精品人人做人人爱视频| 91资源在线观看| 清纯唯美日韩制服另类| 欧美日韩黄网站| 午夜欧美性电影| 亚洲久久一区| 日韩av加勒比| 中文无字幕一区二区三区| 韩国av免费观看| 日韩一区二区电影网| 99青草视频在线播放视| 欧美亚洲国产精品| 国产精品17p| 欧美少妇在线观看| 捆绑调教一区二区三区| 欧美做受高潮6| 欧美日韩亚洲一区二| 亚洲乱码精品久久久久.. | 久久久久久久久一区| 国产精品chinese| 国产九九九视频| 国产精品女上位| 亚洲中文无码av在线| 亚洲免费电影在线观看| 春色校园综合激情亚洲| 91成人理论电影| 欧美韩国一区| 91亚洲一区二区| 中文字幕一区二区日韩精品绯色| 日本欧美www| 在线看欧美日韩| 视频一区在线免费看| 日本最新一区二区三区视频观看| 国产精品综合色区在线观看| 国产黄色三级网站| 精品久久久一区二区| 五十路在线视频| 欧美自拍视频在线| 久久爱www成人| 成年人在线观看视频免费| 国产亚洲精品超碰| 99re热视频| 精品国产一区久久久| 亚洲国产91视频| 天堂а√在线中文在线| 国产宾馆实践打屁股91| 国产在线视频第一页| 亚洲国产精品大全| 国产免费不卡| 婷婷五月色综合| 精品亚洲免费视频| 欧美黑人猛猛猛| 亚洲精品在线观看视频| 免费在线小视频| 青青成人在线| 麻豆91精品91久久久的内涵| 欧美爱爱免费视频| 亚洲成年人在线| 中文字幕一区久| 亚洲欧洲三级| 国产高清久久久久| 日韩黄色a级片| 一本色道久久88综合亚洲精品ⅰ| 国产精品久久乐| av动漫在线播放| 91小视频在线免费看| 中文字幕视频在线播放| 欧美剧在线观看| 久久91精品| 五月天丁香花婷婷| 性欧美疯狂xxxxbbbb| yw193.com尤物在线| 亚洲综合在线中文字幕| 男人的天堂亚洲在线| 成人在线观看高清| 精品无人国产偷自产在线| 成人18视频在线观看| 国产爆乳无码一区二区麻豆| www亚洲一区| 国产精品天天操| 欧美亚洲午夜视频在线观看| 日韩精品免费一区二区三区| 大尺度在线观看| 欧美日韩一二三| 看黄在线观看| 天天成人综合网| 久久综合久久99| a毛片在线免费观看| 日本国产欧美一区二区三区| 欧美1级日本1级| 免费在线观看a视频| 亚洲国产成人久久综合一区| 欧美aaa级|