您的位置:首页 > 其它

Netty学习总结(6)——Netty使用注意事项

2017-09-20 10:57 393 查看

什么是netty?

1、Netty 采用了Reactor模型(异步非阻塞)取代Selector模式(同步非阻塞)

Reactor模式是事件驱动的,有一个或多个并发输入源,有一个Service Handler,有多个Request Handlers;这个Service Handler会同步的将输入的请求(Event)多路复用的分发给相应的Request Handler,Request Handler的操作都是异步的,在此期间程序可以向下继续执行,而通过Future-Listener机制可以将相应的处理状态回调。



Reactor多线程模型



Reactor主从模型

主Reactor用于响应连接请求,从Reactor用于处理IO操作请求!



2、Netty的高效并发编程主要体现在如下几点:

1) volatile的大量、正确使用;

2) CAS和原子类的广泛使用;

3) 线程安全容器的使用;

4) 通过读写锁提升并发性能。

3、Netty除了使用reactor来提升性能,当然还有

1、零拷贝,IO性能优化

2、通信上的粘包拆包

2、同步的设计

3、高性能的序列

Netty怎么用?

1、ChannelInboundHandlerAdapter已被ChannelHandlerAdapter取代

2、channelActive()方法将会在连接被建立并且准备进行通信时被调用。

3、channelRead()方法将会在收到消息时被调用

Netty客户端代码



Netty Client Handler



Netty服务端代码



Netty Server Handler



我们从Netty服务器代码来看,与Reactor模型进行对应!

EventLoopGroup就相当于是Reactor,bossGroup对应Reactor,workerGroup对应从Reactor

TimeServerHandler就是Handler

child开头的方法配置的是客户端channel,非child开头的方法配置的是服务端channel

Netty也要注意几个关键点

1.Handler里面不要做费时的IO/计算操作,最好是自己添加线程池处理比较费时的IO/计算

2.ChannelOption一定要注意设置ChannelOption.WRITE_BUFFER_LOW_WATER_MARK和ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK

3.注意以上两点服务器的性能和内存都会得到比较好的控制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: