1.入门文档
如果是入门的话,官网的文档已经相当好了。里面的例子程序得仔细阅读,这里就不再重复转载了。参见
http://netty.io/wiki/user-guide.html
2.为什么需要netty
2.1 主要是scalibity和performance
2.2 另外Netty In Action有一些说明,笔记如下:
2.2.1 传统的异步编程有2种模式:callback和Future
2.2.2 3种API比较
BIO: N个连接N个Thread
NIO: N个连接1个Selector-->1个Thread
NIO2:CompletionHandler避免了Selector的轮询(JDK7)
这张图是BIO和NIO的比较。
2.2.3 JDK的问题:
1.跨平台:linux上OK,windows上却出问题
2.ByteBuffer无法扩展
3.scattering gathering可能有内存泄露(直到java6的后期update版本或者Java7才解决)
4.epoll bug,可导致CPU 100%。
https://github.com/netty/netty/issues/327
Netty解决了以上4点问题。
3.Netty3,4,5 API不同点
本文写作时,各版本的最新版如下:
netty3 | 3.9.0 |
netty4 | 4.0.18 |
netty5 | 5.0.0 Alpha1 |
3.1 ChannelHandler的变化
首先有一些术语需要理解,请参见下面的表格和3张图,从中可以看到netty3,4,5之间的很大的不同。
收消息 | 上行,入站 | InputStream.read(byte[]) |
发消息 | 下行,出站 | OutputStream.write(byte[]), Socket.connect(SocketAddress), Socket.close() |
Netty3使用了上行下行的概念
Netty4使用了入站出站的概念
Netty5则干脆取消了两者的划分,统一为一个概念
Netty3: ChannelHandler有两个子接口ChannelUpstreamHandler,ChannelDownstreamHandler,
上行和下行,这里的上行和下行和我们一般理解上的上下行不太一样,为何如此可以参考上面的3张图。
相应的类有SimpleChannelUpstreamHandler,SimpleChannelDownstreamHandler,以及一个同时实现两个接口的SimpleChannelHandler
Netty4: 接口变成了ChannelInboundHandler ChannelOutboundHandler,可能是为了避免原来的上下行造成误解,所以改成入站和出站了。
相应的类有ChannelInboundHandlerAdapter,ChannelOutboundHandlerAdapter,我们只要选择一个继承就可以了。
Netty5: 取消了进站、出站的划分,统一为继承ChannelHandlerAdapter,原来的ChannelInboundHandlerAdapter,ChannelOutboundHandlerAdapter被废弃。
ChannelHandler的API,从中可以看到netty3,4,5之间的很大的不同。
3.2 BootStrap的变化
3.2.1 netty4构造ServerBootstrap时采用了构建者模式,使得代码更优雅。
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new DiscardServerHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
而netty3则是用最平常的setter。
ChannelFactory factory = new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ServerBootstrap bootstrap = new ServerBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
return Channels.pipeline(new DiscardServerHandler());
}
});
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
3.2.2 对比一下netty3和4,我们发现netty4因为采用了泛型的写法(.channel(NioServerSocketChannel.class)),所以NioServerSocketChannelFactory就不需要透露给用户了,这个工厂也被取消了。
3.2.3 另外netty4引入了ChannelOption的常量定义,注意这个类是泛型的(ChannelOption<T>),用了这个技巧从而可以确保赋值安全,使得SO_BACKLOG只能传一个int进来,SO_KEEPALIVE只能传一个boolean进来。
public static final ChannelOption<Integer> SO_BACKLOG
public static final ChannelOption<Boolean> SO_KEEPALIVE
Bootstrap的API,netty4相比netty3有比较大的变化,而netty5和netty4比则基本相同。
作为初步,暂时先分析到这里。其余不同点有待以后继续分析。
- 大小: 7.1 KB
- 大小: 6 KB
- 大小: 6.1 KB
- 大小: 6.1 KB
- 大小: 10.1 KB
- 大小: 8.2 KB
- 大小: 3.4 KB
分享到:
相关推荐
通过视频和代码简单介绍了如何搭建一个netty服务,以及netty服务的一些讲解
NULL 博文链接:https://spdx4046.iteye.com/blog/1547135
进行初步研究,特作此项目。 源码地址:https://github.com/thinkingfioa/netty-learning 1.为什么要读Netty? 1.1净资产特性 1.2子项目讲解 netty-private-protocol -----基于Netty自定义私有协议的开发 netty-in-...
Netty是JBoss出品的高效的Java NIO开发框架,关于其使用,可参考我的另一篇文章 netty使用初步。本文将主要分析Netty实现方面的东西,由于精力有限,本人并没有对其源码做了极细致的研 究。如果下面的内容有错误或不...
RedAnt是一个基于Netty的轻量级Web容器 特性: IOC容器:通过@Bean注解可以管理所有对象,通过@Autowired注解进行对象注入 自定义路由:通过@Controller @Mapping @Param注解可以自定义路由 自动参数转换:通过...
充分利用设备管理云平台「Java,SPA,Spring Boot 2.0,Netty,Vue.js 2.0,Element 2.0」项目描述Java&Vue.js全栈项目,大规模扩展设备管理云平台,由以下几部分组成: Java前端服务器,基于Vue.js的Web前端“ SPA...
netty-devnetty开发中使用的例子主要包含集群方面的例子,现在只是初步的写。
java_learning_practice学习java的积累示例:面试高频算法,akka,多线程,zookeeper,Disruptor,NIO,Netty,Thrift等项目组成收集总结初步&&大数据方向看到的优秀文章和系列博客;不定期更新pdf阿卡口味akka学习...
Rabbit从头搭建一个RPC框架,初步打算使用Netty进行数据通信,后期可能会增加BIO和NIO的方式因为是小白入门级别,所以项目代号Rabbit1、首先,先解释下RPC:RPC = Remote Procedure Call ,远程过程调用,它能够通过...
smartacus-mqtt-broker欢迎志同道合的小伙伴一起探讨交流mqtt协议介绍随着工业的快速发展,对设备进行管理和数据采集的需求也越来越高。要解决大量设备的通信...初步协议。压缩消息。可以在不稳定的网络环境中进行良
初步认识RabbitMQ及高可用集群部署 详解RabbitMQ消息分发机制及主题消息分发 RabbitMQ消息路由机制分析 RabbitMQ消息确认机制 Redis redis数据结构分析 Redis主从复制原理及无磁盘复制分析 Redis管道模式...
目前该组件已经初步测试通过。如果大家也需要这样的组件,可以下载尝试一下。所有关键注释都已经写了,如有不明白可以发送邮件 ath.qu.trues@gmail.com 代码分为3个maven模块。 commons-ext : 实现Promise commons-...
初步进阶之路 :laptop:本仓库中所有文字纯原创,如果需要转载,请注明转载出处,谢谢! :face_blowing_a_kiss:如果该系列文字对您有帮助的话,还请点个star给予精神支持! :beaming_face_with_smiling_eyes:一,设计...
RW-HPS第三方Rust战争服务器这是一个基于Netty的服务器初步作为一个高性能高可用的服务器为玩家提供更好的游戏体验执照本服务端遵守GNU通用公共许可证v3.0不会支持的游戏协议列表相关,如ADD列表,更新列表,删除...
Netty,通信网关 弹簧,作为IOC容器 MyBatics,作为持久化方案 功能列表 用户注册/登录/好友列表/私聊界面(包括用户界面) 通过http后台请求管理服务进程 用户数据的持久化 使用独立线程池处理用户消息 待办事项...
)客户端使用TCP长连接(在多次调用共享连接) TCP心跳连接检测支持多种网络传输方式(支持基于javaIO方式的双重样式传输,支持基于Netty的Reactor模型,推荐用外壳)支持流控初步调用,支持Future机制,使用...
java8 源码 目录 Java 基础 容器 并发 JVM I/O Java 8 优雅 Java 代码必备实践(Java编程规范) 网络 ...Netty ...本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识
java8 源码 目录 Java 基础 容器 并发 JVM I/O Java 8 优雅 Java 代码必备实践(Java编程规范) 网络 ...Netty ...本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识
是一个基于Quartz、Netty、ZooKeeper的分布式rpc调度job框架,是目前业内极少使用tcp协议来做异步RPC调度的框架,因为基于tcp协议,所以支持多语言,多语言系统间定时调用非常方便。在整个集团有java版本和php版本,...
是一个基于Quartz、Netty、ZooKeeper的分布式rpc调度job框架。 #一、项目背景 disjob分布式任务调度概述 公司现有定时任务(job)有几千个,基于crontab实现分散于很多系统中,有时会发生故障,原因有多种,job执行...