Netty
1.4.1为什么选择Netty
Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架Avro使用Netty作为通信框架。很多其它业界主流的RPC和分布式服务框架,也使用Netty来构建高性能的异步通信能力。
1.4.2Netty的优点总结如下:
API使用简单,开发门槛低;
功能强大,预置了多种编解码功能,支持多种主流协议;
定制能力强,可以通过ChannelHandler对通信框架进行灵活的扩展;
性能高,通过与其它业界主流的NIO框架对比,Netty的综合性能最优;
社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会被加入;
经历了大规模的商业应用考验,质量得到验证。在互联网、大数据、网络游戏、企业应用、电信软件等众多行业得到成功商用,证明了它完全满足不同行业的商用标准。
正是因为这些优点,Netty逐渐成为JavaNIO编程的首选框架。
说说业务中,Netty的使用场景
一.1.2 原生的NIO在JDK1.7版本存在epollbug
它会导致Selector空轮询,最终导致CPU100%。官方声称在JDK1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有被根本解决。该BUG以及与该BUG相关的问题单可以参见以下链接内容。
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6403933
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=2147719
异常堆栈如下:
java.lang.Thread.State:RUNNABLE
atsun.nio.ch.EPollArrayWrapper.epollWait(NativeMethod)
atsun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:210)
atsun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:65)
atsun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:69)
-locked<0x0000000750928190>(asun.nio.ch.Util$2)
-locked<0x00000007509281a8>(ajava.util.Collections$UnmodifiableSet)
-locked<0x0000000750946098>(asun.nio.ch.EPollSelectorImpl)
atsun.nio.ch.SelectorImpl.select(SelectorImpl.java:80)
atnet.spy.memcached.MemcachedConnection.handleIO(MemcachedConnection.java:217)
atnet.spy.memcached.MemcachedConnection.run(MemcachedConnection.java:836)
一.1.3 什么是TCP粘包/拆包
参考:
一.1.4 TCP粘包/拆包的解决办法
参考:
一.1.5 Netty线程模型
参考:
一.1.6 说说Netty的零拷贝
参考:
一.1.7 Netty内部执行流程
参考:
Netty重连实现
参考:
NettyClient重连实现
http://www.importnew.com/25046.html
评论