前言

本系列文章不会演示DotNetty如何使用,而是探讨DotNetty的实现原理。

DotNetty介绍

DotNetty是Microsoft Azure团队基于Java非常出名的Netty,以C#重写的事件驱动的异步网络框架,引用官方的一段话作为介绍:

DotNetty project – a port of netty, event-driven asynchronous network application framework

一切从事件开始

DotNetty中有两种事件,Inbound EventsOutbound Operations
Inbound Events由请求触发,Outbound Operations则是响应的操作。

事件如何流转

DotNetty中的事件是如何流转的呢,这时候要引入DotNetty中最重要的一个概念 ChannelPipeline

顾名思义,ChannelPipeline就是事件流转的管道,这个管道有两个方向,一个进,一个出。分别对应着上面提到的两种事件。

事件被如何处理

在ChannelPipeline中,可以添加许多的 ChannelHandler,注意,每个ChannelHandler的顺序都非常重要的。

例如,在ChannelPipeline中,添加了 ChannelHandler 1 -- ChannelHandler N 这样的一列ChannelHandler。

Inbound Events 会以 ChannelHandler 1 -> ChannelHandler N 的顺序流转。
Outbound Operations 则会以 ChannelHandler N -> ChannelHandler 1 的顺序流转。

我们来看一个简单的例子:

pipeline.AddLast(new LoggingHandler());
pipeline.AddLast(new DiscardServerHandler());

在这个例子中,我们添加了两个ChannelHandler,在 Inbound Events 中,事件会先经过 LoggingHandler 再流转到 DiscardServerHandler 中,而在 Outbound Operations 中则正好相反。

后记

那么系列一就到这里结束了,我们下篇文章见。