2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Channel

Netty 传输API的核心是:interface Channel,被用于所有的I/O操作。类层次结构:

  • Interface:ServerChannel
  • Class:AbstractChannel
  • HasA:ChannelPipeline ChannelConfig

Netty的Channel实现是线程安全的。 (1)为什么继承Comparable? 因为Channel独一无二,为了保证顺序。


ChannelPipeline

持有所有将应用于入站和出站数据以及事件的 ChannelHandler 实例(实现了应用程序用于处理状态变化以及数据处理的逻辑)。 可以理解为一种拦截过滤器模式,多个ChannelHandler被链接到一起,其中一个handler的输出将作为下一个handler的输入。使用一个特性,可以构建出很灵活的应用程序,可以根据需要添加或者移除ChannelHandler。类层次结构:


ChannelHandler

作用:

  • 将数据从一种格式转换为另一种格式
  • 提供异常的通知
  • 提供Channel变为活动的或者非活动的通知
  • 提供当Channel注册到EventLoop或者从EventLoop注销时的通知
  • 提供有关用户自定义事件的通知

传输 - NIO 非阻塞 I/O io.netty.channel.socket.nio

使用java.nio.channels包作为基础 - 基于选择器的方式。 零拷贝(zero-copy):只有在使用NIO和Epoll传输时才可使用的特性。可以快速高效将数据从文件系统移动到网络接口,而不需要将其从内核空间复制到用户空间。对于数据加密或者压缩的文件系统不可用----只能传输文件的原始内容。


传输 - Epoll 用于Linux的本地非阻塞传输 io.netty.channel.epoll

由JNI驱动的epoll()和非阻塞IO。这个传输支持只有在Linux上可用的多种特性,如SO_REUSEPORT,比NIO传输更快,非阻塞。 如何启用? 将NioEventLoopGroup替换为EpollEventLoopGroup,将NioServerSockertChannel替换为EpollServerSocketChannel


传输 - OIO 旧的阻塞 I/O io.netty.channel.socket.oio

使用java.net作为基础 - 使用阻塞流。


传输 - Local io.netty.channel.local

可以在VM内部通过管道进行通信进行通信的本地传输。


传输 - Embedded io.netty.channel.embeded

Embedded传输,允许使用ChannelHandler而又不需要一个真正的基于网络的传输(常用来测试ChannelHandler的实现)。


传输最佳实践

  • 非阻塞代码库或一个常规的起点,推荐 -> NIO(Linux上使用epoll)
  • 阻塞代码库,推荐 -> OIO
  • 在同一个JVM内部的通信,推荐 -> Local
  • 测试ChannelHandler的实现,推荐 -> Embedded

转载于:https://my.oschina.net/javamaster/blog/2996249

Netty - 传输相关推荐

  1. netty案例,netty4.1中级拓展篇四《Netty传输文件、分片发送、断点续传》

    前言介绍 1.在实际应用中我们经常使用到网盘服务,他们可以高效的上传下载较大文件.那么这些高性能文件传输服务,都需要实现的分片发送.断点续传功能. 2.在Java文件操作中有RandomAccessF ...

  2. netty传输html页面,java 文件传输(netty) 实例源码

    服务器端: package com.rrkd.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Ch ...

  3. netty 文件传输服务器,Netty之二进制文件传输

    传输会话简要 客户端发起一个文本请求给服务器端, 服务器端解析里面文本, 返回文件给客户端, 客户端解析文件 服务器端 因为示例文件比较小, 所以没有做分段传输, 而是直接一次性把整个文件byte[] ...

  4. 简易 IM 双向通信电脑端 GUI 应用——基于 Netty、JavaFX、多线程技术等

    简易 IM 双向通信电脑端 GUI 应用--基于 Netty.JavaFX.多线程技术等 说明 运行效果 核心代码 完整代码 参考知识 说明   这是一个使用 Netty 来实现 IM 双向通信的 d ...

  5. Netty4.x 的逆袭之路 —— 再识 Netty

    Netty4.x 的逆袭之路 2020年9月25日 Netty 结合 protobuf 使用 预习 在netty数据传输过程中可以有很多选择,比如:字符串.json.xml.java对象,但为了保证传 ...

  6. SpringBoot+Netty开发IM即时通讯系列(一)

    前言 最近项目的需求有IM通讯这个模块,经过与老大商量决定使用SpringBoot+Netty的方式构建.于是,在这个系列中记录下过程中的学习历程以及撸码上线,以供日后参考. 如果文中有不当或错误请指 ...

  7. 来自95后的天池中间件大赛总结

    作者:老徐 来源:kirito的技术分享 第一部分:Dubbo Mesh优化 天池中间件大赛的初赛在今早终于正式结束了,公众号停更了一个月,主要原因就是博主的空余时间几乎全花在这个比赛上,第一赛季结束 ...

  8. Spark详解(五):Spark作业执行原理

    Spark的作业和任务调度系统是其核心,它能够有效地进行调度的根本原因是对任务的划分DGG和容错.下面我们介绍一下相关术语: 作业(Job):RDD中由行动操作所生成的一个或者多个调度阶段 调度阶段( ...

  9. Scala _10Actor Model

    概念理解 Actor Model是用来编写并行计算或分布式系统的高层次抽象(类似java中的Thread)让程序员不必为多线程模式下共享锁而烦恼,被用在Erlang 语言上, 高可用性99.99999 ...

最新文章

  1. centos下axel安装与使用
  2. C语言再学习 -- ctype.h字符判断函数
  3. 监听以太网(二) Packet32包说明
  4. 腾讯开源手游热更新方案,Unity3D下的Lua编程
  5. md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
  6. 超详细springboot热部署
  7. 产品ajax无刷新kesion,KesionCMSV6置标使用手册.doc
  8. BZOJ5466 NOIP2018保卫王国(倍增+树形dp)
  9. Android PdfViewer
  10. 懒不是傻懒,如果你想少干,就要想出懒的方法。要懒出风格,懒出境界。
  11. 怎么找网页源文件位置_原神白铁块位置分布图 原神白铁块怎么找
  12. 刚刚,2021 ACM Fellow放榜!李飞飞、谢涛、刘铁岩等13名华人学者当选
  13. mint-UI上拉加载下拉刷新和fastclick冲突问题解决
  14. 计算机专业助我成长作文600,我在成长作文
  15. Jeesit下面form:select的二级联动
  16. 40个增长和管理你的WordPress网站的有用博客工具
  17. ev3编程变量模块_【EV3基础编程 第八课】升阶学习难度,一对一个性化控制程序,变量来了...
  18. 怎样用Java生成随机数?
  19. 微信小程序 定位获取开发模式好的 但是真机就失败了
  20. 360顽固木马专杀工具 千万别用 会删除Oracle服务

热门文章

  1. c语言 结构数组读取,有关文件读写到结构体数组问题;
  2. 如何通过c语言获取ipv6邻居表,急求在vc++6.0中获取IPV6地址的方法,高手请进,谢谢!!...
  3. c++ 文件读写_Java文件读写的常用技术
  4. vim支持python/dyn,但has返回0
  5. cnn之将原始图像转换成矩阵
  6. roc与auc曲线的理解
  7. form-data php,PHP 模拟form-data上传文件
  8. 十以内的加减java编写程序_Java实现随机出题,10道10以内加减法计算代码实例
  9. 数论基础-小白学算法必学(一天一夜的成果)万字
  10. Java传xml时字符串乱码_php调用java传递xml字符串乱码怎么办