Netty入门

原生NIO的缺点(New Input/ Output))

类库和api繁杂

客户端需要断连,重连,异常处理,网络异常

臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。(在SelectionKey.cancel()之后马上进行了一次select调用将fd从poll(epoll)中移除:)

netty的优势(NIO客户端服务器框架,非阻塞同步的通信模式)

api简单(channel变化)

性能高

WebSocket

h5协议

握手机制

基于http的协议,握手后,建立连接就不需要握手请求的HTTP请求的参与

服务器跟客户端随时互相传输数据(互相推送)

实时通信

websocket连接步骤,

1.客户端发布请求

2.服务器响应请求

3.连接成功

websocket的关闭(服务器关闭底层tcp连接,客户端发起TCP的close)

netty代码(服务端)

1.创建一个channel的group(channelGroup)

2.创建一个接收处理的类(继承simpleChannelInBoundHandler)实现里面几个方法

channelActive 客户端与服务的连接时候调用

channelinActivr,客户端与服务的断开

channelReadComplete,接收客户端数据后

exception'caught有一个异常的调用

messageReceived 处理客户的消息(msg有两种,一种代表fullhttprequest-握手请求,一种代表自己的业务)

3.需要用channelinitializer初始化各个创建的组建(simpleChannelInBoundHandler)

4.创建serverbootstrap,等配置,等待客户端连接

解码器

1.定长解码器(FixedLengthFrameDecoder)

2.特殊分隔符解码器 DelimiterBasedFrameDecoder(1024,delimiter)

3.包头不固定长度的解码器:LengthFieldBasedFrameDecoder

4.包头添加总包长度字节 LengthFieldPrepender


https://www.cnblogs.com/rainy-shurun/p/5213086.html

你可能感兴趣的:(Netty入门)