看了一天的netty.总结如下:
看之前,要对nio的机理又一定了解
入门文档的英文版:https://netty.io/wiki/user-guide-for-4.x.html
入门文档的中文版:https://wiki.jikexueyuan.com/project/netty-4-user-guide/
但是这个着重讲怎么用.看完之后只能让代码跑起来.
讲的比较细的话,可以看 ( 一起学Netty )https://blog.csdn.net/linuu/article/details/51306480.这是一个二十篇的教程.
Netty主要关心的问题有:
消息的处理机制:Netty处理消息,是通过handler,内置的handler和自定义的handler,都继承了统一的HandlerAdapter.所有的handler,塞进一个管道中,上一个处理完,传递给下一个(通过ChannelHandlerContext.fire开头的方法).
消息的编码/解码:Netty内置了很多编码器,甚至包括google的protobuf.练习的话,可以用string相关的编码器.做RPC的话可以直接用ProtoBuf.高级应用的话,可以基于ByteBuf来做.
粘包问题:Netty提供了很多方式来处理粘包.主要是再decode上下功夫.提供的策略包括:
- LineBasedFrameDecoder(基于行分隔符)
- DelimiterBasedFrameDecoder(添加特殊分隔符报文来分包)
- FixedLengthFrameDecoder(使用定长的报文来分包)
- LengthFieldBasedFrameDecoder(RPC常用,基于特定的字段头.)
心跳:netty提供了心跳检测的设置,如果客户端在指定时间内没有和服务器端通信的需要,就会发个心跳包过去.
==========
综上,网络编程还是比较麻烦的事情.做个demo是一回事,做工业级的代码是另外一回事.即使有这样库的帮助,仍然需要投入很多精力.如果快速开发,还是用http吧哈哈哈.