前言
本系列文章不会演示DotNetty如何使用,而是探讨DotNetty的实现原理。
DotNetty介绍
DotNetty是Microsoft Azure团队基于Java非常出名的Netty,以C#重写的事件驱动的异步网络框架,引用官方的一段话作为介绍:
DotNetty project – a port of netty, event-driven asynchronous network application framework
一切从事件开始
DotNetty中有两种事件,Inbound Events 和 Outbound 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 中则正好相反。
后记
那么系列一就到这里结束了,我们下篇文章见。