Netty - 传输
2019独角兽企业重金招聘Python工程师标准>>>
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 - 传输相关推荐
- netty案例,netty4.1中级拓展篇四《Netty传输文件、分片发送、断点续传》
前言介绍 1.在实际应用中我们经常使用到网盘服务,他们可以高效的上传下载较大文件.那么这些高性能文件传输服务,都需要实现的分片发送.断点续传功能. 2.在Java文件操作中有RandomAccessF ...
- netty传输html页面,java 文件传输(netty) 实例源码
服务器端: package com.rrkd.server; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Ch ...
- netty 文件传输服务器,Netty之二进制文件传输
传输会话简要 客户端发起一个文本请求给服务器端, 服务器端解析里面文本, 返回文件给客户端, 客户端解析文件 服务器端 因为示例文件比较小, 所以没有做分段传输, 而是直接一次性把整个文件byte[] ...
- 简易 IM 双向通信电脑端 GUI 应用——基于 Netty、JavaFX、多线程技术等
简易 IM 双向通信电脑端 GUI 应用--基于 Netty.JavaFX.多线程技术等 说明 运行效果 核心代码 完整代码 参考知识 说明 这是一个使用 Netty 来实现 IM 双向通信的 d ...
- Netty4.x 的逆袭之路 —— 再识 Netty
Netty4.x 的逆袭之路 2020年9月25日 Netty 结合 protobuf 使用 预习 在netty数据传输过程中可以有很多选择,比如:字符串.json.xml.java对象,但为了保证传 ...
- SpringBoot+Netty开发IM即时通讯系列(一)
前言 最近项目的需求有IM通讯这个模块,经过与老大商量决定使用SpringBoot+Netty的方式构建.于是,在这个系列中记录下过程中的学习历程以及撸码上线,以供日后参考. 如果文中有不当或错误请指 ...
- 来自95后的天池中间件大赛总结
作者:老徐 来源:kirito的技术分享 第一部分:Dubbo Mesh优化 天池中间件大赛的初赛在今早终于正式结束了,公众号停更了一个月,主要原因就是博主的空余时间几乎全花在这个比赛上,第一赛季结束 ...
- Spark详解(五):Spark作业执行原理
Spark的作业和任务调度系统是其核心,它能够有效地进行调度的根本原因是对任务的划分DGG和容错.下面我们介绍一下相关术语: 作业(Job):RDD中由行动操作所生成的一个或者多个调度阶段 调度阶段( ...
- Scala _10Actor Model
概念理解 Actor Model是用来编写并行计算或分布式系统的高层次抽象(类似java中的Thread)让程序员不必为多线程模式下共享锁而烦恼,被用在Erlang 语言上, 高可用性99.99999 ...
最新文章
- centos下axel安装与使用
- C语言再学习 -- ctype.h字符判断函数
- 监听以太网(二) Packet32包说明
- 腾讯开源手游热更新方案,Unity3D下的Lua编程
- md5加密解密代码_Python内置方法实现基于秘钥的信息加解密
- 超详细springboot热部署
- 产品ajax无刷新kesion,KesionCMSV6置标使用手册.doc
- BZOJ5466 NOIP2018保卫王国(倍增+树形dp)
- Android PdfViewer
- 懒不是傻懒,如果你想少干,就要想出懒的方法。要懒出风格,懒出境界。
- 怎么找网页源文件位置_原神白铁块位置分布图 原神白铁块怎么找
- 刚刚,2021 ACM Fellow放榜!李飞飞、谢涛、刘铁岩等13名华人学者当选
- mint-UI上拉加载下拉刷新和fastclick冲突问题解决
- 计算机专业助我成长作文600,我在成长作文
- Jeesit下面form:select的二级联动
- 40个增长和管理你的WordPress网站的有用博客工具
- ev3编程变量模块_【EV3基础编程 第八课】升阶学习难度,一对一个性化控制程序,变量来了...
- 怎样用Java生成随机数?
- 微信小程序 定位获取开发模式好的 但是真机就失败了
- 360顽固木马专杀工具 千万别用 会删除Oracle服务
热门文章
- c语言 结构数组读取,有关文件读写到结构体数组问题;
- 如何通过c语言获取ipv6邻居表,急求在vc++6.0中获取IPV6地址的方法,高手请进,谢谢!!...
- c++ 文件读写_Java文件读写的常用技术
- vim支持python/dyn,但has返回0
- cnn之将原始图像转换成矩阵
- roc与auc曲线的理解
- form-data php,PHP 模拟form-data上传文件
- 十以内的加减java编写程序_Java实现随机出题,10道10以内加减法计算代码实例
- 数论基础-小白学算法必学(一天一夜的成果)万字
- Java传xml时字符串乱码_php调用java传递xml字符串乱码怎么办