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

Netty 網絡編程的秘籍,看這一篇夠了

網絡 網絡管理
傳統的IO模型的web容器,比如老版本的Tomcat,為了增加系統的吞吐量,需要不斷增加系統核心線程數量,或者通過水平擴展服務器數量,來增加系統處理請求的能力。

Netty

version: 4.1.55.Final

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

優點

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

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

IO模型

select、poll和epoll

操作系統內核基于這些函數實現非阻塞IO,以此實現多路復用模型

  • select

select

  1. select 調用需要傳入 fd 數組,需要拷貝一份到內核,高并發場景下這樣的拷貝消耗的資源是驚人的。(可優化為不復制)
  2. select 在內核層仍然是通過遍歷的方式檢查文件描述符的就緒狀態,是個同步過程,只不過無系統調用切換上下文的開銷。(內核層可優化為異步事件通知)
  3. select 僅僅返回可讀文件描述符的個數,具體哪個可讀還是要用戶自己遍歷。(可優化為只返回給用戶就緒的文件描述符,無需用戶做無效的遍歷)
  • pool

和 select 的主要區別就是,去掉了 select 只能監聽 1024 個文件描述符的限制

  • epool

epool

  1. 內核中保存一份文件描述符集合,無需用戶每次都重新傳入,只需告訴內核修改的部分即可。
  2. 內核不再通過輪詢的方式找到就緒的文件描述符,而是通過異步 IO 事件喚醒。
  3. 內核僅會將有 IO 事件的文件描述符返回給用戶,用戶也無需遍歷整個文件描述符集合。

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模型本身與具體事件處理邏輯無關,具有很高的復用性

核心組件

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

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

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

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

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

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

EventLoopGroup會包含多個EventLoop。

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

6.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){}
    }

}

生態

  • Dubbo
  • Spring Reactive

類似技術

Mina、Netty、Grizzly

其他

Proactor非阻塞異步網絡模型

參考

https://mp.weixin.qq.com/s?__biz=MzUxNDA1NDI3OA==&mid=2247492766&idx=2&sn=b5df49147561e467fa5677b5bb09dacb&chksm=f9496577ce3eec61383994499d96a7f2b091b5eb8ee1ac47ad021f78072ae710f41d38257406&scene=27

https://blog.csdn.net/a745233700/article/details/122660246

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

2022-07-06 12:07:06

Python函數式編程

2023-02-10 09:04:27

2020-02-18 16:20:03

Redis ANSI C語言日志型

2022-06-20 09:01:23

Git插件項目

2022-08-01 11:33:09

用戶分析標簽策略

2021-04-08 07:37:39

隊列數據結構算法

2023-09-11 08:13:03

分布式跟蹤工具

2019-05-14 09:31:16

架構整潔軟件編程范式

2023-10-17 08:15:28

API前后端分離

2018-05-22 08:24:50

PythonPyMongoMongoDB

2020-07-03 08:21:57

Java集合框架

2024-09-23 08:00:00

消息隊列MQ分布式系統

2025-08-07 04:10:00

光模塊AI網絡

2022-04-07 10:39:21

反射Java安全

2017-03-11 22:19:09

深度學習

2023-11-18 09:30:42

模型AI

2019-05-09 15:12:20

Linux 系統 數據

2023-11-06 07:21:13

內存結構Jvm

2025-11-03 04:00:00

VLA分詞器RL

2019-04-01 10:43:59

Linux問題故障
點贊
收藏

51CTO技術棧公眾號

国产成人午夜精品5599| 亚洲人成免费网站| 欧美亚男人的天堂| 中文字幕中文字幕在线中一区高清| 中文字幕人妻一区二区在线视频| 91精品国产乱码久久久久久久| 精品美女一区二区三区| 日本精品一区二区三区四区 | 97久久精品人人做人人爽| 国产99久久精品一区二区永久免费 | 日韩中文字幕视频在线观看| 亚洲麻豆一区二区三区| 欧美黄色三级| 亚洲一区二区三区三| 日韩av电影免费播放| www.成人在线观看| 欧美aⅴ一区二区三区视频| 欧美第一页在线| 国产精品www爽爽爽| 国产香蕉精品| 日韩欧美久久久| 国产精品v日韩精品v在线观看| 国产丝袜在线观看视频| 国产精品色在线观看| 久久99国产精品| 国产v片在线观看| 秋霞电影一区二区| 奇米四色中文综合久久| 国产精品第108页| 亚洲国产精品91| 在线看日韩欧美| 亚洲av网址在线| 一区二区三区欧洲区| 欧美福利电影网| 91激情视频在线| 松下纱荣子在线观看| 亚洲精品成人精品456| 亚洲国产欧洲综合997久久| 你懂的视频在线播放| 成人av电影免费在线播放| 91老司机在线| 在线观看黄色国产| 日韩av网站免费在线| 欧洲精品在线视频| 天码人妻一区二区三区在线看| 亚洲电影av| 久久久久久久久国产精品| 色欲人妻综合网| 国产精品成人a在线观看| 一区二区三区国产视频| 国产高潮呻吟久久| 精品精品99| 一区二区欧美激情| 亚洲色图27p| 亚洲成人av| 久久视频在线播放| 国产精品久久久久久久精| 香蕉综合视频| 欧美精品手机在线| 久久久久久久久久久久久久免费看 | 99re这里都是精品| 久久综合久久综合这里只有精品| 亚洲 美腿 欧美 偷拍| 99视频精品全部免费在线| 精品无人区一区二区三区竹菊| 五月天久久久久久| 久久精品夜色噜噜亚洲aⅴ| 欧美日韩系列| 成人p站proumb入口| 国产精品久久看| 女人床在线观看| 91吃瓜在线观看| 一本色道**综合亚洲精品蜜桃冫| 日韩av播放器| 狂野欧美性猛交xxxx| 欧美一区二区三区啪啪| 国产在线观看免费播放| 婷婷精品在线观看| 尤物九九久久国产精品的特点| 女教师淫辱の教室蜜臀av软件| 天天射—综合中文网| 欧美激情三级免费| 久久久久久久久黄色| 捆绑紧缚一区二区三区视频| 99久久久精品免费观看国产| 三级视频在线| 综合av第一页| 青青青青草视频| www.26天天久久天堂| 日韩欧美亚洲一区二区| 久久中文字幕人妻| 99成人在线视频| 韩国欧美亚洲国产| 一卡二卡三卡在线观看| www.在线成人| 亚洲第一精品区| 午夜久久中文| 日韩欧美中文字幕制服| 亚洲精品成人无码| 好吊一区二区三区| 国产精品日韩电影| 理论片中文字幕| 国产精品国产三级国产| 91九色在线观看视频| 亚洲日本中文| 亚洲男女性事视频| 精品无码一区二区三区电影桃花| 三级不卡在线观看| 国产精品日韩一区二区三区| 二区在线视频| 欧美性猛xxx| 在线成人精品视频| 日韩精品2区| 久久人人爽国产| 国产深喉视频一区二区| 欧美国产成人精品| 欧美国产激情视频| 一区二区免费| 久久综合国产精品台湾中文娱乐网| 欧美性猛交bbbbb精品| 国产精品伊人色| 综合色婷婷一区二区亚洲欧美国产| 美女高潮在线观看| 精品国产区一区| 精品人妻伦九区久久aaa片| 日韩高清在线电影| 精品伦理一区二区三区| 91丝袜在线| 欧美大胆人体bbbb| 国产黄在线免费观看| 麻豆久久久久久| 日本免费一区二区三区| 麻豆视频在线看| 精品久久久网站| 欧美日韩在线国产| 国产乱子伦视频一区二区三区| 亚洲一区二区三区涩| 日韩欧美精品一区二区综合视频| 日韩av在线最新| 日韩无码精品一区二区三区| 国产91丝袜在线播放0| ijzzijzzij亚洲大全| 日韩三级成人| 久久精品国产欧美亚洲人人爽| 亚洲综合五月天婷婷丁香| 欧美国产综合色视频| 8x8x最新地址| 日韩综合在线| 91色p视频在线| av网站免费在线观看| 欧美一区二区福利视频| 免费网站观看www在线观| 国产精品中文字幕一区二区三区| 国产女主播av| 91成人午夜| 97香蕉超级碰碰久久免费的优势| va婷婷在线免费观看| 亚洲激情校园春色| 一级少妇精品久久久久久久| 99精品热视频只有精品10| 欧美高清性xxxxhd| 78精品国产综合久久香蕉| 色偷偷av一区二区三区乱| av资源免费看| 图片区小说区区亚洲影院| 欧美成人午夜精品免费| 首页综合国产亚洲丝袜| 亚洲 国产 日韩 综合一区| 日韩av黄色| 欧美激情a在线| 香蕉av在线播放| 欧美日韩在线一区二区| 日本高清一二三区| 不卡视频在线观看| 国产成人精品视频ⅴa片软件竹菊| 欧美日韩色图| 不卡日韩av| 中文字幕影音在线| 日韩在线免费视频观看| 国内老熟妇对白hdxxxx| 午夜精品爽啪视频| 国产三级短视频| 国产91精品在线观看| 3d动漫一区二区三区| 欧美综合一区| 国产精品久久久久久久免费大片| 亚洲一区站长工具| 精品国产一区二区三区久久| 国内爆初菊对白视频| 欧美丝袜第三区| 久久久久久久久久久久久久免费看| 91丝袜国产在线播放| 亚洲理论中文字幕| 亚洲女人av| 热这里只有精品| 国产aⅴ精品一区二区三区久久| 成人在线激情视频| 亚洲美女久久精品| 欧美成人免费大片| 成人在线免费观看| 欧美变态口味重另类| 无码人妻一区二区三区免费| 一区二区成人在线视频| 成年人免费观看视频网站| 国产精品一卡二卡| 99热这里只有精品在线播放| 亚洲成人资源| 黄色录像特级片| 成人一区二区| 免费一区二区三区在在线视频| 精品中文字幕一区二区三区四区 | 久久精品xxxxx| 国产+成+人+亚洲欧洲| 国产在线激情| 中日韩美女免费视频网站在线观看 | 美女18一级毛片一品久道久久综合| 大胆人体色综合| aaa在线观看| 亚洲美女激情视频| 黄色一级大片在线免费看国产| 欧美另类久久久品| 正在播放亚洲精品| 色琪琪一区二区三区亚洲区| 日本一区二区欧美| 亚洲综合色在线| 在线看的片片片免费| 国产精品久久久久影院| www色com| 久久久久久久精| 制服丝袜第二页| 波多野结衣视频一区| 国产伦精品一区二区三区妓女下载| 六月丁香婷婷久久| 欧美三级理论片| 日韩精品久久久久久| 四虎永久在线精品无码视频| 制服诱惑一区二区| 激情五月宗合网| 国产视频一区三区| 国产免费黄视频| 国产亚洲一级| www一区二区www免费| 99国产精品| 男人添女人下面高潮视频| 亚洲高清网站| 狠狠97人人婷婷五月| 性8sex亚洲区入口| 久久精品香蕉视频| 日韩国产在线观看| 91极品尤物在线播放国产| 美女视频第一区二区三区免费观看网站| 欧在线一二三四区| 日本不卡的三区四区五区| 亚洲色图久久久| 麻豆视频观看网址久久| 波多野结衣在线免费观看| 国产精品一区二区91| 中文字幕99页| 97aⅴ精品视频一二三区| 精品黑人一区二区三区观看时间| 久久婷婷综合激情| 中文字幕av久久爽一区| 国产精品久久久久国产精品日日 | 中文精品电影| 欧美黄网在线观看| 国产日本精品| 亚洲欧美自偷自拍另类| 精品夜夜嗨av一区二区三区| 久久人人爽人人片| 97aⅴ精品视频一二三区| 色欲AV无码精品一区二区久久| 中文字幕精品在线不卡| 久久高清内射无套| 丰满岳妇乱一区二区三区| 精人妻无码一区二区三区| 欧美老女人第四色| 成人h动漫精品一区二区无码| 亚洲精品二三区| 91成人高清| 久久久免费精品| 日韩成人av电影| 99视频免费观看蜜桃视频| 在线一级成人| 日本老太婆做爰视频| 久久久精品午夜少妇| 香蕉视频在线观看黄| 久久综合99re88久久爱| 无码人妻精品中文字幕| 午夜久久福利影院| 一区二区的视频| 亚洲精品国产综合久久| 精产国品自在线www| 欧美洲成人男女午夜视频| 精品中文字幕一区二区三区四区 | 欧美三级中文字幕在线观看| 草草视频在线播放| 国产亚洲精品美女久久久| 欧美人与牲禽动交com| 国产精品入口夜色视频大尺度| 澳门久久精品| 中文字幕日韩精品久久| 国产精品久久久久毛片大屁完整版| www,av在线| 国产日韩欧美一区二区三区乱码| 草视频在线观看| 欧美色大人视频| 日本免费不卡| 午夜精品蜜臀一区二区三区免费| 久久久久久久性潮| 日本不卡在线播放| 亚洲经典在线| 超碰91在线播放| 中文一区二区完整视频在线观看| 国产午夜福利精品| 日韩一区二区麻豆国产| 大乳在线免费观看| 国产91精品黑色丝袜高跟鞋| 亚洲精品黑牛一区二区三区| 亚洲在线视频一区二区| 日韩在线一区二区三区| 朝桐光av一区二区三区| 一区二区三区四区乱视频| 一级片视频网站| 在线观看国产成人av片| 国产日韩另类视频一区| 久久精品丝袜高跟鞋| 韩国一区二区三区在线观看| 色姑娘综合天天| 亚洲精品成人精品456| 国产女人高潮时对白| 色噜噜久久综合伊人一本| 免费在线观看一区| 欧美日韩综合网| 久久国产精品99国产| 在线免费观看成年人视频| 午夜精品视频一区| 香港一级纯黄大片| 91爱视频在线| 亚洲另类春色校园小说| 欧美成人免费高清视频| 26uuu国产电影一区二区| a v视频在线观看| 国产视频一区在线| 亚洲第一二三四区| 奇米视频888战线精品播放| 老司机午夜精品视频在线观看| 国产女主播喷水高潮网红在线| 色婷婷综合久久久| sese在线视频| 成人春色激情网| 欧美日韩调教| 国产黑丝一区二区| 狠狠色噜噜狠狠狠狠97| 韩国福利在线| 国产中文字幕91| 欧美激情综合色综合啪啪| 特级特黄刘亦菲aaa级| 亚洲成人精品在线观看| 三级av在线| 国产精品丝袜高跟| 亚洲一区二区日韩| 男人女人拔萝卜视频| 亚洲国产精品影院| 欧美在线观看在线观看| 国产精品久久久| 91精品国偷自产在线电影| 人妻激情偷乱视频一区二区三区| 亚洲午夜视频在线| 精品推荐蜜桃传媒| 91在线观看免费观看 | 97精品视频在线播放| 久久不见久久见免费视频7| 日日干夜夜操s8| 夜夜爽夜夜爽精品视频| 日本一级在线观看| 国产欧美最新羞羞视频在线观看| 亚洲深深色噜噜狠狠爱网站| fc2成人免费视频| 欧美亚洲综合一区| 美女精品导航| 午夜一区二区三区| 国产成人午夜电影网| 久久久精品毛片| 欧美日韩成人精品| 欧美天天综合| 在线观看一区二区三区四区| 在线免费一区三区| 秋霞在线视频| 亚洲二区三区四区| 成人精品国产一区二区4080| 亚洲精品国产欧美在线观看| 欧美精品一区三区| 国产精品美女久久久久久不卡| 免费观看黄网站| 91久久精品网| 2021中文字幕在线| 韩国黄色一级大片| 国产婷婷一区二区| 日本xxxxwww| 91亚洲va在线va天堂va国|