| 1) 保存 Channel 相关的所有上下文信息,同时关联一个 ChannelHandler 对象 |
| 2) 即ChannelHandlerContext 中 包 含 一 个 具 体 的 事 件 处 理 器 ChannelHandler,同 时ChannelHandlerContext 中也绑定了对应的 pipeline 和 Channel 的信息, |
| 方便对 ChannelHandler进行调用 |
| # 在TestHttpServerHandler的channelRead0方法中使用如下方式获取 |
| System.out.println("对应的channel=" + ctx.channel() + " pipeline=" + ctx.pipeline() + |
| " 通过pipeline获取channel" + ctx.pipeline().channel()); |
| System.out.println("当前ctx的handler=" + ctx.handler()); |
| • ChannelFuture close(),关闭通道 |
| • ChannelOutboundInvoker flush(),刷新 |
| • ChannelFuture writeAndFlush(Object msg) , 将 数 据 写 到 ChannelPipeline 中 当 前 |
| • ChannelHandler 的下一个 ChannelHandler 开始处理(出站) |
| 1) Netty 在创建 Channel 实例后,一般都需要设置 ChannelOption 参数。 |
| 2) ChannelOption 参数如下: |
| |
| ChannelOption.SO_BACKLOG: |
| 对应 TCP/IP 协议 listen 函数中的 backlog 参数,用来初始化服务器可连接队列大小。服务端处理客户端连接请求是顺序处理的,所以同一时间只能处理一个客户端连接。 |
| 多个客户端来的时候,服务端将不能处理的客户端连接请求放在队列中等待处理,backlog 参数指定了队列的大小。 |
| |
| ChannelOption.SO_KEEPALIVE: |
| 一直保持连接活动状态 |
| |
- EventLoopGroup 和其实现类 NioEventLoopGroup
| 1) EventLoopGroup 是一组 EventLoop 的抽象,Netty 为了更好的利用多核 CPU 资源,一般会有多个 EventLoop 同时工作,每个 EventLoop 维护着一个 Selector 实例。 |
| 2) EventLoopGroup 提供 next 接口,可以从组里面按照一定规则获取其中一个EventLoop来处理任务。在 Netty 服务器端编程中,我们一般都需要提供两个EventLoopGroup, |
| 例如:BossEventLoopGroup 和 WorkerEventLoopGroup |
| 3) 通常一个服务端口即一个 ServerSocketChannel对应一个Selector 和一个EventLoop线程。BossEventLoop 负责接收客户端的连接并将 SocketChannel 交给WorkerEventLoopGroup 来进行 IO 处理 |
| • BossEventLoopGroup 通常是一个单线程的 EventLoop,EventLoop 维护着一个注册了ServerSocketChannel 的Selector 实例BossEventLoop 不断轮询Selector 将连接事件分离出来 |
| • 通常是 OP_ACCEPT 事件,然后将接收到的 SocketChannel 交给WorkerEventLoopGroup |
| • WorkerEventLoopGroup 会由 next 选择其中一个 EventLoop来将这个SocketChannel 注册到其维护的Selector 并对其后续的 IO 事件进行处理 |

| public NioEventLoopGroup(),构造方法 |
| public Future<?> shutdownGracefully(),断开连接,关闭线程 |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-08-08 Sentinel限流、降级配置详解
2021-08-08 导入项目后报错问题
2021-08-08 Redis入门(三):新数据类型