`
nod0620
  • 浏览: 19997 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
  Tomcat中Session的实现还是比较清晰的,先看类图:    其中HttpSession是Servlet Api,从类图看出来,这里使用了facade模式,StandardSessionFacade为一个门面,而 HttpSession的真正的实现类为StandardSession,它还实现了一个在tomcat内部使用的Session接口,这里讲的都是单台Tomcat的Session,tomcat集群是另外一套的代码。       Manager接口的实现是Session的管理者,保存着这台tomcat中所有的Session.Manager在Context启动的时候被创建,被 ...
      上文http://nod0620.iteye.com/admin/blogs/1030398 写了session复制的发送部分,继续接收部分: 当接收方tomcat接收到需要session的消息时,最终调用了GroupChannel的messageReceived()方法 public void messageReceived(ChannelMessage msg) { if ( msg == null ) return; try { if ( Logs.MESSAGES.isTraceEnabled() ...
 tomcat的session复制大致分两种:all-to-all和backup,先看all-to-all,主要是记录下自己读源代码的心得和代码流程    tomcat集群配置暂时略过。      在tomcat的启动过程中,找到seesion复制的入口,在StandardContext的start()方法中:   Manager contextManager = null; if (manager == null) { if ( (getCluster() != null) & ...
      上次说了NioReceiver,这次看看NioSender,NioSender的体系结构比较复杂的,但感觉不用这么复杂,先看下类图:          这里觉得ParallelNioSender和PooledParallelSender之间有一个类可以去掉,如去了PooledParallelSender,PooledSender类设计成接口,这样的话会比较简洁.   ChannelCoordinator使用的是PooledParallelSender,最后面最重要的是还是NioSender。   NioSender是个状态机,看注释: * - NOT_CONNECT ...
      tomcat集群的时候,在心跳通讯的时候,默认的接收器是NioReceiver,对NIO的使用是个比较经典的例子,在分析NIO之前,先看自己的一个NIO的小例子,代码:   public class HelloServer { private Selector selector; private ByteBuffer byteBuffer = ByteBuffer.allocate(1024); private String name; public HelloServer() throws IOException { selector = Select ...
  上文说到在JIoEndpoint类中处理请求最终是调用到内部接口Handler的process()方法,而Handler的实现类是Http11Protocol的内部类Http11ConnectionHandler,Http11ConnectionHandler又委托Http11Processor进行处理,tomcat在这个地方我觉得类的设计不是很优雅啊,内部类用的太多,导致阅读的时候有困难(好处是内部类持有外部类的的引用,不用使用显示的new)。 先把Http11ConnectionHandler的类附上: protected static class Http11Connect ...
先上个图先,一个只有我自己能看懂的url时序图. 这个基本上是connentor初始化的时候,初始化了Http11Protocol,接着初始化JIoEndpoint,初始化介绍后,connentor调用start()方法开始工作鸟,接着调用Http11Protocol,JIoEndpoint的start()方法,JIoEndpoint的start()方法大有可为,看代码: public void start() throws Exception { // Initialize socket if not done before if ...
Global site tag (gtag.js) - Google Analytics