最近比较喜欢看底层源码,今天在看tomcat的源码,给大家分享一点自己看源码的心得。
无论是看rocketmq的源码也好,spring源码也好,其他源码也好,不要先看细节,先去看整体架构,记得之前就说过这句话。
tomcat源码中的东西很多,比如有各种类加载器,比如WebappClassLoader,JasperLoader,CommonLoader,CatalinaLoader,SharedLoader等。
还有各种filter,CorsFilter用来处理跨域,SessionInitializerFilter用来处理Session等。
还有Connector连接器,用来处理对外访问项目的端口等。 还有BasicAuthenticator,用来管理tomcat的web项目访问权限。
还有比如ContainerMBean,ConnectorMBean,用来处理jmx相关配置。
然后NioReceiver,NioSender用来管理nio发送和接收信息。
Http11NioProtocol,Http11Nio2Protocol,Http2Protocol,AjpNio2Protocol,AjpNioProtocol,用来解决http和ajb协议相关。
还有比如Pool,SSLContext相关类用来访问java的jndi接口,也就是直接调用jvm底层的c++接口
以及ssi相关类,是用来管理asp.net相关项目的。
DataSourceStore用来把session存储到数据库中。
像ClusterManagerBase,ClusterListener等解决集群高可用问题。
每个人对于技术的理解的看法是不一样的,tomcat的源码给我的第一印象,就是它的安全性强,扩展性强,可用性能很好,能支持高并发。安全性强就比如对于各个容器的权限校验等,扩展性就比如tomcat支持各种协议,如http,ajb,http2等,当然用户有需要可以扩展一些自己需要的协议。 可用性强是体现在tomcat支持集群多节点扩容。 支持高并发是因为tomcat底层连接采用的是nio,nio是采用同步非阻塞的方式解决了高并发的问题。
还有就是tomcat打破了双亲委派模型,这样访问不同版本jar包中的类。 还有tomcat对线程池进行了重写,提升了tomcat的qps性能。
今天先随便聊聊,希望大家可以多去看底层源码,了解各个框架的底层设计,知其然还要知其所以然,拜拜。