原生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