下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 05 | 为什么孤注一掷:独选Netty?
00:00 / 00:00
标清
  • 高清
  • 标清
  • 普清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Netty源码剖析与实战

共60讲 · 约670分钟
4371
免费
01 | 课程介绍
免费
02 | 内容综述
免费
03 | 揭开Netty面纱
免费
04 | 为什么舍近求远:不直接用...
免费
05 | 为什么孤注一掷:独选Nett...
06 | Netty的前尘往事
07 | Netty的现状与趋势
08 | Netty怎么切换三种I/O模...
09 | 源码剖析:Netty对I/O模...
10 | Netty如何支持三种Reacto...
11 | 源码剖析:Netty对Reacto...
12 | TCP粘包/半包Netty全搞...
13 | 源码剖析:Netty对处理粘...
14 | 常用的“二次”编解码方式
15 | 源码剖析:Netty对常用编...
16 | keepalive与idle监测
17 | 源码剖析:Netty对keepal...
18 | Netty的那些“锁”事
19 | Netty如何玩转内存使用
20 | 源码解析:Netty对堆外内...
21 | Netty代码编译与总览
22 | 源码剖析:启动服务
23 | 源码剖析:构建连接
24 | 源码剖析:接收数据
25 | 源码剖析:业务处理
26 | 源码剖析:发送数据
27 | 源码剖析:断开连接
28 | 源码剖析:关闭服务
29 | 编写网络应用程序的基本步...
30 | 案例介绍和数据结构设计
31 | 实现服务器端编解码
32 | 实现一个服务器端
33 | 实现客户端编解码
34 | 完成一个客户端雏形
35 | 引入"响应分发"完善客户...
36 | Netty编码中易错点解析
37 | 调优参数:调整System参...
38 | 调优参数:权衡Netty核心...
39 | 调优参数:图解费脑的三个...
40 | 跟踪诊断:如何让应用易诊...
41 | 跟踪诊断:应用能可视,心...
42 | 跟踪诊断:让应用内存不“...
43 | 优化使用:用好自带注解省...
44 | 优化使用:“整改”线程模...
45 | 优化使用:增强写,延迟与...
46 | 优化使用:如何让应用丝般...
47 | 优化使用:为不同平台开启...
48 | 安全增强:设置“高低水位...
49 | 安全增强:启用空闲监测
50 | 安全增强:简单有效的黑白...
51 | 安全增强:少不了的自定义...
52 | 安全增强:拿来即用的SSL...
53 | 安全增强:拿来即用的SSL...
54 | 安全增强:拿来即用的SSL...
55 | Cassandra如何使用Netty...
56 | Dubbo如何使用Netty ?
57 | Hadoop如何使用Netty ?
58 | 赏析Netty之美
59 | 如何给Netty贡献代码?
60 | 课程回顾与总结
本节摘要
 写留言

精选留言(5)

  • 2019-11-06
    老师,一般的netty服务端能支持多少长连接?

    作者回复: 不好意思回复迟了,最近一直忙录课,没来得及好好给您回复,我把你这个问题单独记录下来,以后做个netty 100问什么的到时候再集中发您,这里我先把我的理解总结下贴给您:
    这个问题其实不是 Netty 专属问题,类似问题:一个服务器或者客户端能创建多少连接,以 linux 为例:

    一个连接是由:客户端【IP + PORT】+ 服务器 【IP(固定的) + PORT(固定的)】 四个元素决定的,所以支持多少,要从两个角度分析:

    (1)对于单个客户端(IP地址固定)而言:
        理论值:单个客户端连接到一个服务器最多连接数取决于本地可用端口数(因为其他3个元素固定了): 65535(报文中端口占用字节数是16,所以最大端口数65535)- 1024(保留端口,不给用) 约 64K。
        实际值:取决于以下三个方面:
                1)TCP层:ip_local_port_range (参考/proc/sys/net/ipv4/ip_local_port_range),可调整,最大65535-1024
                2)系统限制:最大文件句柄数(参考/etc/security/limits.conf),可调整,最大21亿
                3)资源限制:内存等资源有限,例如连接本身占用资源,Netty本身的socket相关的对象也占用jvm,需要根据机器做测试。

    (2)对于服务器而言:
        理论值: 最大连接数 = 客户端数量(IP地址数量) * 单个客户端的最多连接数(约64K),不考虑资源限制,最多21亿,实际以资源限制为准, 100万连接就要占用3G以上了。
        实际值: 受限于三个方面:
                1)TCP层: IPv4使用32位(4字节)地址,因此地址空间中只有4,294,967,296(约43亿),所以乘以单个客户端最大64K, 数量惊人。
                1)系统限制:同上,最大21亿
                2)资源限制:同上

    总结:
    (1)对于客户端,6万多点,对于服务器,100万到1000万,再多,内存就要30G以上了,所以网上经常说百万连接。当然,如果你机器内存1G不到的话,那也搞不了了。
    (2)单纯看连接多少意义不是很大,因为连接是为了做事情,光能连上很多,但是占用资源过大导致基本已经不能动弹的话,意义就不大了,不过这个问题本身有趣。

    扩展:
    (1)查看ip_local_port_range方法:
        [root@netty ~]# cat /proc/sys/net/ipv4/ip_local_port_range
        16384    61000

    (2)服务器支持1200万连接的案例:
        https://mrotaru.wordpress.com/2013/06/20/12-million-concurrent-connections-with-migratorydata-websocket-server/
     (3) 最大文件句柄数的最大值受另外一个参数控制:
            [root@netty ~]# cat /proc/sys/fs/nr_open
                1048576
        设置超过的话:
            [root@netty ~]# ulimit -Hn 9000000
        - bash: ulimit: open files: cannot modify limit: Operation not permitted
        所以如果想改的更大,这需要修改这个参数(默认百万:1048576(1024 * 1024)):
            sysctl -w fs.nr_open=100000000
        那这参数最大值,可以到多少呢?2147483584 (即7FFFFFC0,也就是在MAXINT(2147483647)基础上按64字节对齐)
    (4)linux系统下,一个socket连接一般占用3K,所以100万连接至少需要3G,而1000万就要30G了,所以可以看下(2)引用连接文章里的内存大小,很大。

    格式有点乱,先将就看看,等课程结束,我排版好,做个小册子发你们。

    4
  • 2019-10-14
    Tomcat 和 Jetty 是 web 容器,虽然 netty 也能实现,但是并不完善;Netty 的主要应用是针对传输层的,我感觉 这里拿Tomcat 和 Jetty 比较 Netty 并不合适吧

    作者回复: 严格来说,确实不是一个层次的东西,侧重点也不同,但是看很多人经常把这二个混淆,而且确实,表面看他们也经常呈现出类似的效果,比如netty + http codec 约等于 tomcat+servlet实现web服务器, 考虑到这点,所以内容编排上放一起做了一个区分和比较;
    netty核心确实主要是提供传输层的支撑,但是它也提供了很多应用层协议的编解码支持。

    2
  • 2019-10-10
    只听说过Mina,Tomcat,Jetty和Netty,Java领域高性能网络通讯框架看来非Netty不可了

    作者回复: 真的是这样,选择要“跟风”且果断

    1
  • Netty是基于Socket抽象层(传输层)通信的,而Tomcat是基于HTTP协议(应用层)通信的,它们是不是不可以类比呢?

    作者回复: 是不同层次的东西,但是经常搞混淆,所以我就把这个放进来了比较了下,有点类似雷锋和雷峰塔的比较了(不过有点夸张了,虽然不同层次,但是能实现类似的东西,所以才放一起做了比较。)

  • 2019-11-01
    “关键问题是 Netty就从类没有输过”。老师一本正经的幽默还真的很幽默