![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
文章平均质量分 64
cutesource
这个作者很懒,什么都没留下…
展开
-
解析spring schedule
Spring在schedule这块支持JDK Timer、concurrent、quartz三种,这三种任务调度方案在实现机制和调用方法上都不同,但spring通过对其包装,使得基于spring能用统一的配置和编码风格来使用这三种schedule方案。总得来说这三种schedule都是基于scheduler->trigger->job的基本流程,因此spring通过TimerFactoryBe原创 2009-11-29 14:18:00 · 20880 阅读 · 2 评论 -
从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式(三)
最后我们再看看NIO方面最著名的框架Mina,抛开Mina有关session和处理链条等方面的设计,单单挑出前端网络层处理来看,也采用的是与Jetty和Tomcat类似的模式,只不过它做了些简化,它没有隔开请求侦听和请求处理两个阶段,因此,宏观上看它只分为两个阶段。先看看它的类图:其中:SocketAcceptor起线程调用SocketAcceptor.Work负责新连接侦听,并交给SocketIoProcessor处理SocketIoProcessor起线程调用SocketIoProcessor.Work原创 2011-02-17 19:42:00 · 20200 阅读 · 13 评论 -
解析phpwind团购模块实现
前面我专门解析过phpwind的主题定制化设计,本以为团购功能是基于主题定制化配置出来的,结果看源码和表结构才发现团购是单独来实现的,但实现机理与定制化主题这块类似,可能是不同时期的产物,发现定制化主题满足不了团购的需求,这也许是phpwind设计中不够完善的小瑕疵吧。不扯那么多了,先看看团购这块的表结构设计:pw_pcfield:团购活动字段表,用于存放团购定制化字段,因此团购和主题定制原创 2010-04-20 21:56:00 · 6275 阅读 · 1 评论 -
解析phpwind的插件体系
看phpwind的官方网站,发现有个很重要版块为“phpwind 插件开发”,第一感觉是phpwind有个很完善的插件体系,吸引开发者来基于插件体系进行二次开发。于是乎我饶有兴趣地解析一下phpwind的插件体系的实现。我先说说在我看来插件体现比较重要的两个特征:插件维护体系插件能插入的粒度对于第一个特征phpwind体现得还不错,在后台有个专门的栏目是管理插件,能够对放在ha原创 2010-04-17 22:05:00 · 5906 阅读 · 3 评论 -
解读phpwind的主题定制化设计
最近研究phpwind源码过程中,发现它对发帖主题具有可定制化能力,而不是一概标准贴格式,能够根据具体应用场景定制化属性,让帖子信息结构化起来,具体功能以房屋买卖版块为例,可以分为出租、出售、求购等类型的帖子,如下图所示: 发帖的时候,能根据类型,定制各个属性,以出租为例,如下图所示: 在列表展示页里,也能根据定制化属性,来显示列表,以出租为例:原创 2010-04-16 10:28:00 · 6689 阅读 · 0 评论 -
phpwind源码解析------index.php
phpwind的功能很强悍,设计理念也非常不错,但代码写得有些乱,不过可能是php本身的特点导致,让我们这些写惯了java的开发人员看起来极不习惯,并且源码里的注释少得可怜,只能自己边看边加了,今天看了看了根目录下的index.php,带注释的源码如下:<?phpdefine(SCR,index);require_once(global.php);include_onc原创 2010-04-18 11:14:00 · 12399 阅读 · 5 评论 -
Tomcat源码分析(四)------ Request和Response处理的全过程
从Tomcat源码分析(二)可知,用户的一个请求会经过n个环节的处理,最后到达开发人员写的Servlet,传给Servlet也就是HttpServletRequest和HttpServletResponse,因此可以认为这一路走下来无非就是把最原始的Socket包装成Servlet里用到的HttpServletRequest和HttpServletResponse,只不过每个环节完成的包装功能和部原创 2009-12-28 15:48:00 · 15558 阅读 · 8 评论 -
Tomcat源码分析(三)------ 可携带状态的线程池
最近想实现一个可携带状态的线程池,具体需求就是池中的线程被用来处理某种信息,而此信息可视为线程所依赖的外部状态。如果用简单的线程池来实现,线程初始化时就得赋予某些信息,使得线程无法被再次利用。在看老版Tomcat的源码时,找到了答案,其实现思路主要是利用了线程的等待和唤起,HttpProcessor的实现正好基于此思路,时序图如下所示:初始化HttpProcessor线程时,没法赋予所需的原创 2009-12-26 16:52:00 · 11098 阅读 · 2 评论 -
Tomcat源码分析(二)------ 一次完整请求的里里外外
前几天分析了一下Tomcat的架构和启动过程,今天开始研究它的运转机制。Tomcat最本质就是个能运行JSP/Servlet的Web服务器,因此最典型的应用就是用户通过浏览器访问服务器,Tomcat接收到请求后转发给Servlet,由Servlet处理完后,把结果返回给客户端。今天就专门解析一下这么一个完整的请求的内部机理。通过DEBUG,一路跟下来,发现Tomcat处理请求的原创 2009-12-19 21:35:00 · 33369 阅读 · 11 评论 -
Tomcat源码分析(一)------ 架构
废话少说,拉代码,导入eclipse开干,具体步骤可以参考http://hi.baidu.com/hateeyes/blog/item/7f44942a20ad8f9d023bf66d.html下面谈谈我对Tomcat架构的理解总体架构:面向组件架构基于JMX事件侦听1)面向组件架构tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成原创 2009-12-14 19:51:00 · 102138 阅读 · 23 评论 -
Quartz源码分析(一)------ 以线程等待的方式实现按时间调度
Quartz是运用最广的任务调度框架,它最核心的组成部分是Scheduler、Trigger、JobDetail,然后给Scheduler配置个线程QuartzSchedulerThread,此线程在Scheduler初始化时启动,等待Scheduler start,然后从JobStore里拿到最近要触发的Trigger,以线程等待的方式等到trigger触发时间点,之后就是执行trigger所关原创 2009-12-08 16:21:00 · 23894 阅读 · 9 评论 -
Hessian源码分析(三)------ HessianSkeleton
HessianSkeleton是Hessian server端的核心类,主要功能是接收网络输入流(被包装为AbstractHessianInput),反序列化输入流得到methodName和参数,然后调用服务端的服务,得到结果后序列化为输出流,返回给客户端,主要流程如下图所示:HessianSkeleton的核心代码如下所示:public void invoke(Object se原创 2009-12-05 16:05:00 · 6180 阅读 · 2 评论 -
Hessian源码分析(二)------ HessianProxy
Hessian在客户端一块采用Proxy模式,当客户端调用远程接口时,HessianProxy会代理这个动作,在invoke方法中,把客户端请求的方法和参数序列化为预订格式的输出流,主要流程如下图所示: 下面我将详细解析一下invoke源码:public Object invoke(Object proxy, Method method, Object []args)原创 2009-12-05 15:05:00 · 8389 阅读 · 0 评论 -
hessian源码分析(一)------架构
在计费中心的对外交互这块采用了hessian,有必要对hessian的运行机理和源码做一定的解析。大致翻了翻源码后,发现hessian的主要结构分客户端与服务端,中间基于http传输。客户端主要做的事情是把对远程接口调用序列化为流,并传输到服务端;服务端主要做的事情是把传输过来的流反序列化为对服务的请求,调用相应服务后把结果序列化为流返回给客户端。一次完整的调用如下图所示:Hess原创 2009-12-05 11:01:00 · 11730 阅读 · 2 评论 -
从Jetty、Tomcat和Mina中提炼NIO构架网络服务器的经典模式(一)
如何正确使用NIO来构架网络服务器一直是最近思考的一个问题,于是乎分析了一下Jetty、Tomcat和Mina有关NIO的源码,发现大伙都基于类似的方式,我感觉这应该算是NIO构架网络服务器的经典模式,并基于这种模式写了个小小网络服务器,压力测试了一下,效果还不错。废话不多说,先看看三者是如何使用NIO的。Jetty Connector的实现先看看有关类图:其中:SelectChannelConnector负责组装各组件SelectSet负责侦听客户端请求SelectChannelEndPoint负责IO的原创 2011-02-17 17:46:00 · 47904 阅读 · 20 评论