Socket(TCP/UDP)及服务器、应用层协议(Http/FTP/SIP/Mega/SNMP)及服务器(Apache/FTPServer/SipProxy/MegaServer/SNMPServe

一、从J2SE开始(对J2SE及JVM有一个很深入的研究)推出整个Java企业级世界:

  1 Socket协议(TCP/IP)及服务器:现在Java开发对网络协议处理不需要关注底层(如物理层、数据链路层),从IP层和TCP/UDP层开始关注如,自己编写TCP/UDP的SocketServer/SocketClient。

    如:聊天室、即时通信工具、QQ、Mina等

   从谁编写角度可以分两类:

    一类自己按着自己业务需求编写TCP/UDP的SocketServer/SocketClient,当然自己要处理所有相关协议栈细节。

    另一类找第三方或开源的别人已经做好拿过来用就可以,如Mina,对于这种自己一定要弄清楚实现原理,优缺点,能够用好。

    对于第三方或开源的软件如何选型原则?

    具体需求(如开源假设)选择依据:成熟度及稳定度、应用广泛性、社区活跃性、上手容易程度、持续升级维护容易程度、

    未来发展指数、推荐指数。。。开源参考:《开源技术选型手册》

 

2 应用层协议(Http/FTP/SIP/Mega/SNMP)及服务器(分发服务器(处理流媒体)/接入服务器(处理消息)/Apache/FTPServer/SipProxy

   /MegaServer/SNMPServer)

   这一层应用特点:各个应用层协议可能会将TCP/UDP包体信息定义为多个部分,如消息头、消息体、消息尾,

   及消息各个部分通过什么来区分的以及功能作用等

 (如:Http协议,将TCP包体分成两部分,第一部分作为Http协议消息头信息,消息头又包含 start-line(Request-Line|Status-Line)、

   message-header等,第二部分作为Http协议消息体信息  参考HTTP1.1_rfc2616)

   这种情况,如果自己编写服务器或客户端,就要在Socket(TCP/UDP)的基础上,将收发的包体按着具体协议(如Http)自己解析或

  封装   自己写一个HttpServer,就需要自己对Http 头 get/post等方法进行解析处理。

 (如:Mega协议也是将TCP包体内容非常两部分第一部分Mega头,第二部分是Mega体信息)

   这一层基本上都有第三方开源的服务器,要懂原理的基础上用第三方的主要选型,自己编写需要对协议栈很清楚。

 

3 Sun(现在应该称为Oracle)企业级规范(Servlet规范、EJB规范)及业务服务器(Tomcat/JBoss/IIS) (MS有.Net规范 IIS服务器)

   这一层在应用层基础上,增加企业级规范如Tomcat服务器首先在Socket层是一个TCPServer,其次应用层协议是一个HttpServer, 最后增加

  Servlet规 范,就成为了Servlet Container(Tomcat = TCPServer + HttpServer + Servlet Container)

  如Jboss在Servlet Container的基础上又增加了EJB规范,就成为了J2EE Server.

   这一层服务如果自己编写的话,需要首先实现一个Socket Server,然后解析Http实现HttpServer,最后还要实现对应的企业级规范如Servlet

  才能成为Servlet 容器。

   可以研究一下Servlet容器:jetty麻雀虽小,五脏俱全,适合代码级研究。Tomcat/resin 适合原理上,架构级研究

 

4 开源企业级应用(Strust /Spring/Hibernate/...)

   开源企业级应用(如Spring)启动位置在web.xml(Servlet规范定义的)中配置,当Servlet容器启动时,会读取web.xml按着配置启
   动Spring,Spring容器被Servlet容器启动后,就可以在自己的容器中处理各种业务。

   一般在web.xml配置启动有多种方式如:

   一种是继承Servlet,启动自己的服务。 如:Spring  :org.springframework.web.servlet.DispatcherServlet

   另一种继承Filter,在Filter中启动自己的容器。  如:Paoding <filter-class>net.paoding.rest.RestFilter</filter-class>

   只要能够在Servlet容器启动时,能够将自己的应用启动起来,对外提供服务器即可。具体实现百花齐放。

   可以研究一下 Spring启动原理、Hibernate启动原理、Spring工作原理

 

5  行业或企业共通业务

  现在的java的Web应用多数在"4 开源企业级应用(Strust /Spring/Hibernate/..)"基础上开发(而不是EJB重量级容器上开发)

  各个行业或企业有些行业或企业特点,共通的东西,可以将变化的,不变化的分开,按着一定的原则将业务抽象形成共同的东西,就成了

  企业的框架或者基础模块。多数有一定规模的企业都有自己的框架或基础模块。

  如:现在做的网管中的nms_common_api包、人人网Rose等

  这个可以参考:《企业应用架构模式》

 

二、 从J2SE开始(对J2SE及JVM有一个很深入的研究),理论上实现整个5层:

首先, 实现"1 Socket协议(TCP/IP)及服务器",

然后, 在"1 Socket协议(TCP/IP)及服务器"基础上在实现"2应用层协议(Http/FTP/SIP/Mega/SNMP)及服务器"

其次, 在"2应用层协议(Http/FTP/SIP/Mega/SNMP)及服务器"基础上实现"3Sun(现在应该称为Oracle)企业级规范(Servlet规范、

         EJB规范)及业务服务器(Tomcat/JBoss/IIS)"

再其次, 在"3Sun(现在应该称为Oracle)企业级规范"的基础上实现"4开源企业级应用(Strust /Spring/Hibernate/...)"

最后,在"4开源企业级应用(Strust /Spring/Hibernate/...)"的基础上实现"5 行业或企业共通业务"。

最最后,推出整个Java世界。

posted @ 2011-05-15 12:39  ajian005  阅读(284)  评论(0编辑  收藏  举报