文档详情

蚂蚁课堂每特学院-2期netty高级.pdf

发布:2025-02-27约1.8万字共16页下载文档
文本预览下载声明

Netty高级

Netty快速

什么是Netty

Netty是一个基于JAVANIO类库的异步通信框架,它的架构特点是:异步非阻塞、基于驱动、高

性能、高可靠性和高可定制性。

Netty应用场景

1.分布式开源框架中dubbo、Zookeeper,MQ底层rpc通讯使用就是netty。

2.游戏开发中,底层使用netty通讯。

为什么选择netty

在本小节,我们总结下为什么不建议开发者直接使用JDK的NIO类库进行开发的:

1)NIO的类库和API繁杂,使用麻烦,你需要熟练掌握Selector、ServerSocketChannel、

SocketChannel、ByteBuffer等;

2)需要具备其它的额外技能做铺垫,例如熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,

你必须对多线程和网路编程非常熟悉,才能编写出高质量的NIO程序;

3)可靠性能力补齐,工作量和难度都非常大。例如客户端断连重连、网络闪断、半包读写、失败

缓存、网络拥塞和异常码流的处n理等等,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐工

作量和难度都非常大;

4)JDKNIO的BUG,例如臭名昭著的epollbug,它会导致Selector空轮询,最终导致CPU100%。

声称在JDK1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该bug发生

概率降低了一些而已,它并没有被根本解决。该BUG以及与该BUG相关的问题单如下:

Netty服务器端

classServerHandlerextendsSimpleChannelHandler{

/**

*通道关闭的时候触发

*/

@Override

publicvoidchannelClosed(ChannelHandlerContextctx,ChannelStateEvente)throwception{

System.out.println(channelClosed);

}

/**

*必须是连接已经建立,关闭通道的时候才会触发.

*/

@Override

publicvoidchannelDisconnected(ChannelHandlerContextctx,ChannelStateEvente)throwception{

super.channelDisconnected(ctx,e);

System.out.println(channelDisconnected);

}

/**

*捕获异常

*/

@Override

publicvoidexceptionCaught(ChannelHandlerContextctx,ExceptionEvente)throwception{

super.exceptionCaught(ctx,e);

System.out.println(exceptionCaught);

}

/**

*接受消息

*/

publicvoidmessageReceived(ChannelHandlerContextctx,MessageEvente)throwception{

super.messageReceived(ctx,e);

//

显示全部
相似文档