DotNetty学习—— 总章(索引)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/a1234012340a/article/details/91040073

前一阵子学习了基于.net core的Socket编程。觉得很是有趣。准备深入学习一下Socket编程,听闻Java的Netty框架很是优秀。所以今天来了解一下—DotNetty

这个东西是怎么来的呢?   是.net core版的Netty。具体怎么来的请自行百度。在此不赘述!!!

Netty是一个提供 asynchronous event-driven (异步事件驱动)的网络应用框架,是一个用以快速开发高性能、可扩展协议的服务器和客户端。

换句话说,Netty 是一个 NIO (同步非阻塞)客户端服务器框架,使用它可以快速简单地开发网络应用程序,比如服务器和客户端的协议。Netty 大大简化了网络程序的开发过程比如 TCP 和 UDP 的 socket 服务的开发。

socket通信分为三种:

BIO:  传统阻塞IO

NIO: 同步非阻塞式IO

AIO: 异步非阻塞IO,(非阻塞采用的是注册通知的模式。)

官方也提供了一些例子。地址如下

https://github.com/Azure/DotNetty

也可自行看例子学习

下面开始学习。和简单摸索!(参考Netty官方文档会比看我我写的学习更快)

https://waylau.com/netty-4-user-guide/    中文文档(非官方翻译)

http://netty.io/wiki/all-documents.html   英文文档

因为本人比较小白。所以此篇文章会从最开始创建项目开始为大家一一讲述

Netty的核心理念:

  1. 一个EventLoopGroup当中会包含一个或多个EventLoop。
  2. 一个EventLoop在它的整个生命周期当中都只会与唯一一个Thread进行绑定。
  3. 所有由EventLoop所处理的各种I/O事件都将在它所关联的那个Thread上进行处理。
  4. 一个Channel在它的整个生命周期中只会注册在一个EventLoop上。
  5. 一个EventLoop在运行过程中,会被分配给一个或多个Channel。

1.首先创建.net core 项目,创建空项目

2.引入DotNetty相关引用

NuGet一搜索DotNetty会发现一堆相关引用。这里需要讲一下各个库都是分别做什么的

DotNetty.Buffers: 对内存缓冲区管理的封装。

DotNetty.Codecs: 对编解码是封装,包括一些基础基类的实现,我们在项目中自定义的协议,都要继承该项目的特定基类和实现。

DotNetty.Codecs.Mqtt: MQTT(消息队列遥测传输)编解码是封装,包括一些基础基类的实现。

DotNetty.Codecs.Protobuf: Protobuf 编解码是封装,包括一些基础基类的实现。

DotNetty.Codecs.ProtocolBuffers: ProtocolBuffers编解码是封装,包括一些基础基类的实现。

DotNetty.Codecs.Redis: Redis 协议编解码是封装,包括一些基础基类的实现。

DotNetty.Common: 公共的类库项目,包装线程池,并行任务和常用帮助类的封装。

DotNetty.Handlers: 封装了常用的管道处理器,比如Tls编解码,超时机制,心跳检查,日志等。

DotNetty.Transport: DotNetty核心的实现,Socket基础框架,通信模式:异步非阻塞。

DotNetty.Transport.Libuv: DotNetty自己实现基于Libuv (高性能的,事件驱动的I/O库) 核心的实现。


注:一下重点解析服务端,客户端只附上代码

3.写一个世界上最简单的服务(Discard)

有了如上这些准备工作。下面咱们就可以开始写一些服务了。由于书写量过多。所以所有单独服务都会令开辟文章

服务端:

https://blog.csdn.net/a1234012340a/article/details/91041956

客户端:

https://blog.csdn.net/a1234012340a/article/details/93138687

4.应答服务(Echo)

服务端:

https://blog.csdn.net/a1234012340a/article/details/92649538

客户端:

因为Echo和Discard本身没有太大的区别。只不过一个是丢弃,另一个是读取数据显示,并且返回数据。客户端获取返回数据,显示(和服务端流程一样)。所以Echo的客户端代码以及讲解就不在赘述!

5.时间服务(Time)

服务端:

https://blog.csdn.net/a1234012340a/article/details/92650374

6.WebSocket实现

https://blog.csdn.net/a1234012340a/article/details/100040073


完全个人研究,有错希望大神纠正。也可留下您的联系方式,共同探讨

——————————————————————————————————

作者:Henny_CHN

转载请标明出处,原文地址:  

https://blog.csdn.net/a1234012340a/article/details/91040073

如果感觉本文对您有帮助,请留下您的赞,您的支持是我坚持写作最大的动力,谢谢!

猜你喜欢

转载自blog.csdn.net/a1234012340a/article/details/91040073