Netty是什么
Netty 是一款用于创建高性能网络应用程序的高级框架。
Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器
和客户端
DotNetty是什么
DotNetty是微软的Azure团队仿造Netty编写的网络应用程序框架。
优点
- 关注点分离——业务和网络逻辑解耦;
- 模块化和可复用性;
- 可测试性作为首要的要求
历史
- 阻塞Socket通信特点:
- 建立连接要阻塞线程,读取数据要阻塞线程
- 如果要管理多个客户端,就需要为每个客户端建立不同的线程
- 会有大量的线程在休眠状态,等待接收数据,资源浪费
- 每个线程都要占用系统资源
- 线程的切换很耗费系统资源
- 非阻塞Socket(NIO)特点:
- 如图,每个Socket如果需要读写操作,都通过事件通知的方式通知选择器,这样就实现了一个线程管理多个Socket的目的。
- 选择器甚至可以在所有的Socket空闲的时候允许线程先去干别的事情
- 减少了线程数量导致的资源占用,减少了线程切换导致的资源消耗
- Netty特点
Netty设计的关键点
异步和事件驱动是Netty设计的关键
核心组件
- Channel:一个连接就是一个Channel
- 回调:通知的基础
public class ConnectHandler : SimpleChannelInboundHandler<string>
{
public override void ChannelActive(IChannelHandlerContext context)
{
// 新的连接建立的时候会触发这个回调
base.ChannelActive(context);
}
protected override void ChannelRead0(IChannelHandlerContext ctx, string msg)
{
throw new NotImplementedException();
}
}
-
Future:通知的另一种方式,可以认为ChannelFuture是包装了一系列Channel事件的对象。回调和Future相互补充,相互结合同时也可以理解Future是一种更加精细的回调。
但是ChannelFuture在DotNetty中被Task取代
-
事件和ChannelHandler
ChannelHandler是事件处理器,负责处理入站事件和出站事件。通常每一个事件都由一系列的Handler处理。
本文参考资料以及截图来自《Netty实战》
转自cnblogs