zoukankan      html  css  js  c++  java
  • Netty的基本概念

    异步

    等待它的同时你也可以做点别的事情

    阻塞I/O

    只能同时处理一个连接,要管理多个并发客户端,需要为每个新的客户端Socket创建一个新的Thread

    使用Selector的非阻塞I/O

    class java.nio.channels.Selector是Java的非阻塞I/O实现的关键。它使用了事件通知API以确定在一组非阻塞套接字中有哪些已经就绪能够进行I/O相关的操作。因为可以在任何的时间检查任意的读操作或者写操作的完成状态,一个单一的线程便可以处理多个并发的连接。

    Channel

    Channel 是 Java NIO 的一个基本构造。
    它代表一个到实体(如一个硬件设备、一个文件、一个网络套接字或者一个能够执
    行一个或者多个不同的I/O操作的程序组件)的开放连接,如读操作和写操作

    目前,可以把 Channel 看作是传入(入站)或者传出(出站)数据的载体。因此,它可以 被打开或者被关闭,连接或者断开连接。

    Future

    Future提供了另一种在操作完成时通知应用程序的方式。这个对象可以看作是一个异步操 作的结果的占位符;它将在未来的某个时刻完成,并提供对其结果的访问。
    ChannelFuture提供了几种额外的方法,这些方法使得我们能够注册一个或者多个 ChannelFutureListener实例。监听器的回调方法operationComplete(),将会在对应的 操作完成时被调用。
    简而言之,由ChannelFutureListener提供的通知机制消除 了手动检查对应的操作是否完成的必要。
    每个 Netty 的出站 I/O 操作都将返回一个 ChannelFuture;也就是说,它们都不会阻塞。 正如我们前面所提到过的一样,Netty 完全是异步和事件驱动的。

    pipeline

    Each channel has its own pipeline and it is created automatically when a new channel is created.

    Channel的注冊

    在 Netty 中, 每个 Channel 都会关联一个特定的 EventLoop, 并且这个 Channel 中的所有 IO 操作都是在这个 EventLoop 中执行的;

    bossGroup

    bossGroup 是用于服务端 的 accept 的, 即用于处理客户端的连接请求

    workerGroup

    workerGroup 负责客户端连接通道的 IO 操作

  • 相关阅读:
    C语言基础课程 第二课 HelloWorld不为菜鸟所知的秘密
    C语言基础课程 第一课 Linux环境配置小实战httpserver
    Linux企业级开发技术(6)——libevent企业级开发之内存管理
    Linux企业级开发技术(7)——libevent企业级开发之锁和线程
    Linux内存管理学习笔记--概述
    5月16日云栖精选夜读:从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举
    luoguP1063 能量项链
    bzoj1060 [ZJOI2007]时态同步
    bzoj1864 [Zjoi2006]三色二叉树
    bzoj1864 [Zjoi2006]三色二叉树
  • 原文地址:https://www.cnblogs.com/bihanghang/p/10172325.html
Copyright © 2011-2022 走看看