Netty
什么是Netty
答:Netty是NIO最流行的框架,它的健壮性、功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架Avro就使用了Netty作为底层通信框架,其他还有业界主流的RPC框架,也使用Netty来构建高性能的异步通信能力
通过对Netty的分析,我们将它的优点总结如下。
◎ API使用简单,开发门槛低;
◎ 功能强大,预置了多种编解码功能,支持多种主流协议;
◎ 定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展;
◎ 性能高,通过与其他业界主流的NIO框架对比,Netty的综合性能最优;
◎ 成熟、稳定,Netty修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼;
◎ 社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会加入;
◎ 经历了大规模的商业应用考验,质量得到验证。Netty在互联网、大数据、网络游戏、企业应用、电信软件等众多行业已经得到了成功商用,证明它已经完全能够满足不同行业的商业应用了。
正是因为这些优点,Netty逐渐成为了Java NIO编程的首选框架。
什么是粘包、拆包?产生的背景是什么?
答:Tcp协议是长连接为了高性能的传输,发送和接受的时候都采用了缓冲区,对同一通道多次发送信息时,信息存入缓冲区,当数据总字节大于缓冲区的时候,会一次性将这些数据都写入;
如:缓存区6个字节,发一次msg,第二次msg; 这个时候数据数据msgmsg会一起缓存起来,并写入;这个时候一起发送的信息就是msgmsg,而非2次的msg; 这种情况叫粘包; 理解发送的信息被合并写入了
当:缓存区5个字节,第一次msg,第二次msg;这个时候数据msgms会做为缓存一次写入; s会作为一次缓存写入;这个时候发送的信息就是msgms,第二次是s;这种情况就叫拆包; 理解发送的信息被折分了写入了;
同理,响应数据;
怎么解决拆包分包?
答:1、每次请求以固定的字节发送; 【不符合实际情况】
2、在请求的数据使用\n\r去进行区分发送的数据;netty用
socketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024));
socketChannel.pipeline().addLast(new StringEncoder(Charset.forName("UTF-8")));进行处理粘包拆包;
浙公网安备 33010602011771号