# DotNettyExample **Repository Path**: wantlook/DotNettyExample ## Basic Information - **Project Name**: DotNettyExample - **Description**: DotNetty的示例应用程序。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 13 - **Created**: 2021-04-23 - **Last Updated**: 2021-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README DotNetty完全教程(一) 参考地址:https://blog.csdn.net/nxy_wuhao/article/details/102794214 聂14昊51 2019-10-30 09:23:23 14747 收藏 30 分类专栏: C# DotNetty 文章标签: DotNetty C# 网络库 版权 写本系列文章的目的 我一直以来都在从事.NET相关的工作,做过工控,做过网站,工作初期维护过别人写的网络库,后来自己写网络库,我发现在使用C#编程的程序员中,能否写出高性能的网络库一直都是考验一个程序员能力的标杆。为了写出高性能的网络库,我查阅了很多资料,发现Java的Netty有着得天独厚的设计以及实现优势,Java也因为Netty的存在,在开发大吞吐量的应用程序中得心应手。 我想,.NET程序员为什么不能使用这么好的应用程序框架。好在,Azure团队写出了DotNetty,使得.NET程序员也可以迅速的,便捷的搭建一个高性能的网络应用程序,但是,DotNetty并没有多少资料,项目代码中也没有多少注释,这对我们的学习以及使用带来了极大的障碍。 我通过对于Netty的研究,一步步的使用DotNetty来创建应用程序,分析DotNetty实现了哪些,没有实现哪些,实现的有何不同,希望通过最简单的描述,让读者能够了解DotNetty,无论是在工作学习中快速搭建网络应用程序还是通过分析Netty的思想,为自己写的网络库添砖加瓦都是十分有意义的。 本系列文章参考了《Netty实战》,感兴趣的同学可以去看看这本书。 Netty是什么 Netty 是一款用于创建高性能网络应用程序的高级框架。 Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器 和客户端 DotNetty是什么 DotNetty是微软的Azure团队仿造Netty编写的网络应用程序框架。 优点 关注点分离——业务和网络逻辑解耦; 模块化和可复用性; 可测试性作为首要的要求 历史 阻塞Socket通信特点: 建立连接要阻塞线程,读取数据要阻塞线程 如果要管理多个客户端,就需要为每个客户端建立不同的线程 会有大量的线程在休眠状态,等待接收数据,资源浪费 每个线程都要占用系统资源 线程的切换很耗费系统资源 非阻塞Socket(NIO)特点: 如图,每个Socket如果需要读写操作,都通过事件通知的方式通知选择器,这样就实现了一个线程管理多个Socket的目的。 选择器甚至可以在所有的Socket空闲的时候允许线程先去干别的事情 减少了线程数量导致的资源占用,减少了线程切换导致的资源消耗 Netty特点 Netty设计的关键点 异步和事件驱动是Netty设计的关键 核心组件 Channel:一个连接就是一个Channel 回调:通知的基础 public class ConnectHandler : SimpleChannelInboundHandler { public override void ChannelActive(IChannelHandlerContext context) { // 新的连接建立的时候会触发这个回调 base.ChannelActive(context); } protected override void ChannelRead0(IChannelHandlerContext ctx, string msg) { throw new NotImplementedException(); } } 1 2 3 4 5 6 7 8 9 10 11 12 Future:通知的另一种方式,可以认为ChannelFuture是包装了一系列Channel事件的对象。回调和Future相互补充,相互结合同时也可以理解Future是一种更加精细的回调。 但是ChannelFuture在DotNetty中被Task取代 事件和ChannelHandler ChannelHandler是事件处理器,负责处理入站事件和出站事件。通常每一个事件都由一系列的Handler处理。 ———————————————— 版权声明:本文为CSDN博主「聂14昊51」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/nxy_wuhao/article/details/102794214