Netty 基础学习总结

什么是Netty?

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用。

netty版本大致版本分为  netty3.x  和  netty4.x、netty5.x

Netty的应用领域:

1. 分布式进程通信

例如: hadoop、dubbo、akka等具有分布式功能的框架,底层RPC通信都是基于netty实现的,这些框架使用的版本通常都还在用netty3.x

2. 游戏服务器开发

最新的游戏服务器有部分公司可能已经开始采用netty4.x 或 netty5.x

Netty3实现的Echo服务器

使用Netty搭建一个服务器和客户端,服务器可以回显客户端发送消息的逆序,例如客户端发送“abc”,服务端回复“cba”。实现代码如下:

服务端:

客户端:

Handler代码中要注意channelDisconnected与channelClosed的区别:

  • channelDisconnected只有在连接建立后断开才会调用
  • channelClosed无论连接是否成功都会调用关闭资源

Netty 线程模型

Netty是典型的Reactor模型结构。Java编写的网络框架,大多数都是基于Reactor模式进行设计和开发,Reactor模式基于事件驱动,特别适合处理海量的I/O事件。

关于这个部分,比较复杂 = = 推荐一篇好文章:netty-threading-model

这里总结一下服务端线程模型的典型过程:

  1. User Thread 绑定服务端端口
  2. 随机选取1个线程作为Acceptor,监听客户端连接
  3. 监听到客户端连接后,将客户端SocketChannel注册到IO线程池中
  4. IO线程池随机选取1个线程作为IO线程处理网络读写事件
  5. IO线程处理完成后返回

发表评论

电子邮件地址不会被公开。