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相关引用

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位整数消息的构建工作。

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

 


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

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

 

7.进阶学习Socket和WebSocket互通

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

 

 


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

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

作者:Henny_CHN

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

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

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

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值