netty(三)--传输

传输 API 的核心是 interface Channel, 它被用于所有的 I/O 操作。
在这里插入图片描述
如图所示, 每个 Channel 都将会被分配一个 ChannelPipeline 和 ChannelConfig。
ChannelConfig 包含了该 Channel 的所有配置设置, 并且支持热更新。
ChannelPipeline 持有所有将应用于入站和出站数据以及事件的 ChannelHandler 实例,这些 ChannelHandler 实现了应用程序用于处理状态变化以及数据处理的逻辑。
ChannelHandler 的典型用途包括:

  • 将数据从一种格式转换为另一种格式;
  • 提供异常的通知;
  • 提供 Channel 变为活动的或者非活动的通知;
  • 提供当 Channel 注册到 EventLoop 或者从 EventLoop 注销时的通知;
  • 提供有关用户自定义事件的通知。
    在这里插入图片描述
名称描述
NIOio.netty.channel.socket.nio使用 java.nio.channels 包作为基础——基于选择器的方式
Epollio.netty.channel.epoll由 JNI 驱动的 epoll()和非阻塞 IO。 这个传输支持只有在 Linux上可用的多种特性,如SO_REUSEPORT,比 NIO 传输更快, 而且是完全非阻塞的
OIOio.netty.channel.socket.oio使用 java.net 包作为基础——使用阻塞流
Localio.netty.channel.local可以在 VM 内部通过管道进行通信的本地传输
Embeddedio.netty.channel.embeddedEmbedded 传输,允许使用 ChannelHandler 而又不需要一个真正的基于网络的传输。这在测试你的ChannelHandler 实现时非常有用

选择器背后的基本概念是充当一个注册表,在那里你将可以请求在 Channel 的状态发生变化时得到通知。可能的状态变化有:

  • 新的 Channel 已被接受并且就绪;
  • Channel 连接已经完成;
  • Channel 有已经就绪的可供读取的数据;
  • Channel 可用于写数据

在这里插入图片描述
Linux作为高性能网络编程的平台,其重要性与日俱增,这催生了大量先进特性的开发, 其在这里插入图片描述中包括epoll——一个高度可扩展的I/O事件通知特性。 这个API自Linux内核版本 2.5.44(2002)被引入,提供了比旧的POSIX select和poll系统调用 更好的性能,同时现在也是Linux上非阻塞网络编程的事实标准。 Linux JDK NIO API使用了这些epoll调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值