DotNetty学习—— 总章(索引)

前一阵子学习了基于.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相关引用

DotNetty学习—— 总章(索引)_第1张图片

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库) 核心的实现。


channelActive() 方法将会在连接被建立并且准备进行通信时被调用。因此让我们在这个方法里完成一个代表当前时间的32位整数消息的构建工作。

回调方法 触发时机 client server
channelRegistered 当前channel注册到EventLoop true true
channelUnregistered 当前channel从EventLoop取消注册 true true
channelActive 当前channel激活的时候 true true
channelInactive 当前channel不活跃的时候,也就是当前channel到了它生命周期末 true true
channelRead 当前channel从远端读取到数据 true true
channelReadComplete channel read消费完读取的数据的时候被触发 true true
userEventTriggered 用户事件触发的时候    
channelWritabilityChanged channel的写状态变化的时候触发    

 


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

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

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

你可能感兴趣的:(DotNetty)