Erlo

【高手问答 281 期汇总】 —— 攻破Netty底层原理

收藏 2022-04-21 14:30:21   117   开源中国
页面报错/反馈
点赞

Netty是一个互联网公司非常流行的Java开源网络应用程序框架,可以帮助用户快速开发高性能、高稳定的网络通信服务。作为最有影响力的NIO框架,Netty得到了众多架构师和程序员的喜爱,并且在互联网基础架构、游戏行业、大数据通信等领域都有广泛的应用。尤其在互联网基础架构方面,Netty几乎一统江湖。那么很多Java学习者都觉得Netty入门的门槛很高,其实是因为这方面的资料太少了,并不是因为它有多难。希望通过本期活动,让大家学会如何快速编写出高质量的网络应用程序。

OSCHINA本期高手问答( 4月12日- 4月18日) 我们请来了@闪电侠 和大家一起探讨关于Netty、源码相关的问题。

嘉宾简介

闪电侠(俞超),某互联网公司技术专家。精通Netty、Spring、MyBatis 等开源框架。负责公司各类长连项目的开发与维护,有千万级别实时在线连接、百亿吞吐长连通信经验。Vim和IDEA党,对效率和编写优美代码有极致的追求。

问答汇总

问:是什么原因导致netty的上手难度这么高?开源项目这么少?

答:Netty 上手难度高,是因为实际在业务场景过程中,使用的偏少,更多在一些底层的网络中间件比较多,所以网上分享的资料比较少,当然最近几年开始多了起来。 

 

问:netty门槛较高,曾经也通过看书看博客学习,但都没能学下去,您觉得对于没有netty经验的人来说应该如何去学习netty?

答:建议通过项目驱动来学,一个完整的项目做完,知识体系也就掌握了,我的新书《跟闪电侠学 Netty:Netty 即时聊天实战与底层原理》可以帮你坐到这一点,如果有 java 和网络编程的基础,大概两周左右的时间可以掌握。

 

问:Netty的源码读了4.x, 后面Netty又升级了5.x版本,这个过程是否会导致读源码成了无用功? 

答:阅读源码掌握的还是整体框架以及阅读源码的思路,这个不会变,甚至后面在阅读其他框架源码的时候都会轻松很多的,不会是无用功。

 

问:Netty的高性能体现在哪些方面?

答:Reactor 模型,Recycler 及 FastThreadLocal 等一些组件,零拷贝技术,线程无锁化技术,内存池等等。

 

问:在使用netty中,我们有哪些细节需要注意?

答:

  1. 不要堵塞主 reactor 线程,不然会导致全局请求处理能力下降。
  2. 很多操作都是异步的,对于统计,日志类代码需要注意注册回调来实现。
  3. 事件传播顺序,包括 inBound 事件,outBound 事件的顺序需要注意,否则很容易出现 bug。
  4. 保证足够的堆外内存。

 

问:分布式会话怎么处理,发送消息时如何定位会话通道

答:分布式环境下,一条消息从业务发出,经过路由网关,路由网关根据用户信息在 redis 中查到用户连接在哪台服务器(用户登录后需要把用户连接的服务器信息保存至 redis),然后把数据透传到这台服务器进行下发。

 

问:netty上的应用怎么写单元测试?(主要是mock网络环境),怎么方便的debug?大量的回调和事件驱动,怎么保证代码的可读性?有最佳实践分享吗?

答:单元测试可以基于 EmbeddedChannel 来做,模拟真实的数据传输,可以 debug。 本书中会从头到尾贯穿一个 IM 项目,可以做为最佳实践来参考,大量的回调业务可以做到不用关心,很多底层逻辑 netty 都已封装好。


高手问答栏目查看:主题 高手问答 - OSCHINA - 中文开源技术交流社区

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认