gzx0 2020-06-12
如何学netty?
关键点在于抓住主线:
请求处理最主要的流程是什么?
最核心的逻辑是什么?
在了解这些主线之前,不要迷恋细节,否则容易迷失在那些细枝末节的代码中。
如何学好一个技术?
1、了解这个技术的本质、背景、定位、过去和未来
2、这个技术的原理是什么
3、看文档,怎么用这个技术
4、别人是怎么的,有什么借鉴的地方
5、这个技术有什么需要改进的地方,为这个技术添砖加瓦
通过该课程学习,希望达到的目标
1、掌握java网络编程基本知识和原理
2、使用netty构建一个能推向产品线的java网络服务器
3、熟悉netty核心源码以及其深层原理
4、能够熟练诊断、分析并排查netty使用中的各种故障
netty相关书籍
网络知识:《TCP/IP详解》、《图解TCP/IP》、《Wireshark网络分析就这么简单》 Java 网络编程:《Java 网络编程》、《Java TCP/IP Socket编程》 Netty 相关:《Netty权威指南》《Netty实战》(译自《Netty in action》: Norman Maurer)《Netty进阶之路:跟着案例学Netty》
netty解决问题的方案
1、绕着走 epoll空转问题,做一个空检测
2、 搞不定就不支持,http_opt 设置在jdk中的异常,不支持
netty的优点;
解决了一些bug
性能更好
屏蔽了细节,更易用
老师,一般的netty服务端能支持多少长连接?
一个连接是由:客户端【IP + PORT】+ 服务器 【IP(固定的) + PORT(固定的)】 四个元素决定的 tcp层:客户端TCP层:最大64k,服务端:ip地址数量(约43亿)*64k 系统限制:最大文件句柄数:21亿 资源限制:linux系统下,一个socket连接一般占用3K,所以100万连接至少需要3G,而1000万就要30G了。 理论值:单个客户端连接到一个服务器最多连接数取决于本地可用端口数(因为其他3个元素固定了): 65535(报文中端口占用字节数是16,所以最大端口数65535)- 1024(保留端口,不给用) 约 64K。
使用netty的项目:
spring5 的spring web flux
rocketmq
dubbo
spark
hadoop
elasticsearch
zookeeper