【Netty 网络通信】Channel 接口解析

简介: 【1月更文挑战第9天】【Netty 网络通信】Channel 接口解析

Channel需要被注册到某个EventLoop上,在Channel整个生命周期内都由这个EventLoop处理IO事件,也就是说一个Channel和一个EventLoop进行了绑定, 但是一个EventLoop可以同时被多个Channel绑定。  

基本的I/O操作(bind()connect()read()write())依赖于底层网络传输所提供的原 语。

在基于Java的网络编程中,其基本的构造是类SocketNettyChannel 接口所提供 的API,被用于所有的I/O 操作。大大地降低了直接使用Socket 类的复杂性。此外,Channel 也是拥有许多预定义的、专门化实现的广泛类层次结构的根。 由于Channel 是独一无二的,所以为了保证顺序将Channel 声明为java.lang.Comparable 的一个子接口。

public interface Channel extends AttributeMap, ChannelOutboundInvoker, Comparable<Channel> {}

因此,如果两个不同的Channel 实例返回了相同的散列码,那么 AbstractChannel 中的 compareTo()方法的实现将会抛出一个Error

Channel 的生命周期状态:

  • ChannelUnregisteredChannel 已经被创建,但还未注册到EventLoop
  • ChannelRegisteredChannel 已经被注册到了 EventLoop
  • ChannelActiveChannel 处于活动状态(已经连接到它的远程节点)。它现在可以接 收和发送数据了
  • ChannelInactiveChannel 没有连接到远程节点 当这些状态发生改变时,将会生成对应的事件。这些事件将会被转发给ChannelPipeline 中的ChannelHandler,其可以随后对它们做出响应。在我们的编程中,关注ChannelActiveChannelInactive 会更多一些。  

重要Channel 的方法:

  • eventLoop: 返回分配给ChannelEventLoop
  • pipeline: 返回 ChannelChannelPipeline,也就是说每个 Channel 都有自己的 ChannelPipeline
  • isActive: 如果 Channel 是活动的,则返回true。活动的意义可能依赖于底层的传输。 例如,一个Socket 传输一旦连接到了远程节点便是活动的,而一个Datagram 传输一旦被 打开便是活动的。
  • localAddress: 返回本地的SokcetAddress
  • remoteAddress: 返回远程的SocketAddress
  • write: 将数据写到远程节点,注意,这个写只是写往Netty内部的缓存,还没有真正 写往socket
  • flush: 将之前已写的数据冲刷到底层socket进行传输。
  • writeAndFlush: 一个简便的方法,等同于调用write()并接着调用flush()
相关文章
|
Web App开发 监控 数据可视化
可视化Netty channel的工具
可视化Netty channel的工具
590 0
|
测试技术 程序员 Linux
【Docker项目实战】使用Docker部署blog轻量级博客系统
【2月更文挑战第16天】使用Docker部署blog轻量级博客系统
1322 2
|
存储 网络协议 Java
Netty入门到超神系列-Java NIO 三大核心(selector,channel,buffer)
选择器,也叫多路复用器,Java的NIO通过selector实现一个线程处理多个客户端链接,多个channel可以注册到同一个Selector,Selector能够监测到channel上是否有读/写事件发生,从而获取事件和对事件进行处理,所以Selector切到哪个channel是由事件决定的。当线程从某个客户端通道未读取到数据时,可以把空闲时间用来做其他任务,性能得到了提升。
779 0
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
4819 3
|
域名解析 网络协议 Linux
Linux系统下DNS配置指南
Linux系统下DNS配置指南
4359 1
|
9月前
|
NoSQL Java API
Redisson 分布式锁深度解析:API 使用与底层源码探秘
本文深入解析Redisson分布式锁的使用与源码实现,涵盖可重入锁、公平锁、读写锁、红锁等核心API的应用场景与配置方法,并通过Lua脚本、Hash结构和看门狗机制剖析其原子性、重入性与自动续期原理,助力开发者高效安全地实现分布式并发控制。
854 0
|
2月前
|
人工智能 开发工具 C++
Claude Code 在大型代码库里的工程实践
Anthropic 发布Claude Code大型代码库最佳实践:强调“代码库需适配AI”,而非仅依赖模型。核心在于通过CLAUDE.md分层文档、LSP符号导航、hooks自动维护、skills按需加载、MCP接入内部系统等工程化配置,让Claude高效理解复杂项目(含C/C++/Java等)。配置即能力,治理与负责人机制同样关键。
813 4
Claude Code 在大型代码库里的工程实践
|
大数据 数据管理 分布式数据库
探索 HBase GUI 工具,助您轻松驾驭大数据世界!
从此告别繁琐,迎接大数据时代的新利器! #HBase #GUI #数据管理 #工具分享
1160 2
探索 HBase GUI 工具,助您轻松驾驭大数据世界!
|
安全 Java API
Nacos 3.0 Alpha 发布,在安全、泛用、云原生更进一步
近期,我们欣喜地宣布 Nacos 3.0 的第一个版本 Nacos 3.0-ALPHA 已经发布。Nacos 3.0 的目标是在 2.0 的基础上,进一步优化安全性、易用性和标准化。同时,我们将引入更多功能,帮助用户在分布式协调、AI 大模型、云原生等多种场景中更好地使用 Nacos,以提升其广泛适应性。
883 138

热门文章

最新文章