zoukankan      html  css  js  c++  java
  • netty篇-组件和设计

    channel-类似于一个socket

    一个Channel对应一个socket。提供了基本的io操作。bind()、connect()、read()、write()。

    EmbeddedChannel:

    LocalServerChannel:

    NioDatagramChannel:

    NioSctpChannel:

    NioSocketChannel:

    EventLoop-提供事件的触发时机

    eventLoop主要用在:控制流、多线程处理、并发

    ChannelFuture-可以提供异步回调实现

    主要用在异步通知。netty中所有的io操作都是异步的。netty提供了channelFuture接口,有个addListener()方法注册了一个ChannelFutureListener,使其在某个操作完成时得到通知。

    ChannelHandler和ChannelPipeline-有了组件之后,我们可以在这里写我们的业务逻辑

    ChannelHandler主要用来处理出站入站的信息,大部分的业务逻辑会集中在其中。举例来说就是:ChannelInboundHandler主要用来处理入站数据逻辑,大部分的业务代码通常驻留在一个或者多个ChannelInboundHandler中。

    ChannelPipeline则提供了ChannelHandler链的容器,并定义了用于在该链上传播入站和出站事件流的api。他们的关系类似于这样:

    ps:出站和入站是从客户端和服务器端的方向来说的。如果从客户端角度来看,一个消息从客户端应用程序->服务端,称这些事件是出站的;反之从服务器端->客户端的方向,称这些事件是入站的。如果从服务器端角度来看,则是相反的。

    编码器和解码器-写业务逻辑之前,我们需要把消息转换成我们可以识别的格式

    当通过netty发送或者接受一个消息的时候,都会发生一次数据转换。入站消息会被解码,出站消息会被编码,网络中传输的,都是一些字节。

    对于特定的需要,netty为编码器和解码器提供了不同类型的抽象类。netty内置有很多的编解码器,默认都实现了ChannelOutboundHandler或者ChannelInboundHandler接口。

    对于每个入站数据,channelRead方法都会被重写。在调用之后,它将由预置解码器提供的decode()方法进行解码,解码完成之后将已转码的字节转发给下一个ChannelPipeline中的下一个ChannelInboundHandler。出站模式则相反

    抽象类SimpleChannelInboundHandler

    这个类是netty提供的默认的ChannelHandler实现,我们只需要继承这个类,并实现它的特定方法即可简单实现我们需要的定制化功能。

    引导-客户端和服务器的启动器Bootstrap

    引导分为客户端引导和服务端引导,客户端引导是 Bootstrap 服务端引导对应的是 ServerBootstrap。

    客户端一般是connect连接,服务端则是bind绑定端口。

    不同的地方在于EventLoopGroup的不同,客户端只有一个EventLoopGroup,用来处理客户端发出去的连接事件。而服务端则拥有两个EventloopGroup,一个用来处理bind事件,处理服务端的入站事件,还有一套EventLoopGroup用来处理客户端发起来的连接事件,一旦服务端接受了客户端的连接,第二个EventLoopGroup就会给它分配一个EventLoop。

    起风了,努力生存
  • 相关阅读:
    WPF的本质:数据和行为
    WPF 布局
    wpf中的样式与模板
    WPF命令
    WPF数据转换
    WPF 深入研究 之 Control 控件
    WPF布局控件
    WPF TextBox 验证输入
    Razor引擎学习:RenderBody,RenderPage和RenderSection
    WPF控件模版
  • 原文地址:https://www.cnblogs.com/StivenYang/p/14945678.html
Copyright © 2011-2022 走看看