百科问答小站 logo
百科问答小站 font logo



.NET 平台中有很多 BS 框架,能介绍一下他们之间的关系和实用价值吗? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

从层次结构上来分,BS开发的框架,分为三个层次:

  • HTTP层
  • 应用层
  • 业务层

当然这里的层次名称都是我随便瞎编的,主要是方便理解不同的框架运作的位置。

HTTP层的框架负责最基础的逻辑,监听TCP端口,解析HTTP请求并负责发送HTTP响应。同时负责将不同的HTTP请求委派给不同的应用处理。通常来说完成这个工作的就是WebServer,同时,所谓的反向代理,七层交换机,其工作原理也差不多。唯一的区别是HTTP请求的委派,WebServer通常透过接口委派,例如IIS的ISAPI,或者通用的CGI技术。而反代和七层交换机、负载均衡器等则以HTTP请求的方式委派。所以反代后面还得需要WebServer,也就是HTTP层的框架。

可以简单的认为,HTTP层之下,是TCP Stream,HTTP层之上,是HTTP Request。

HTTP层的东西,譬如IIS、Apache、nginx、Kestrel、servlet……等等


HTTP框架将TCP流解析为HTTP请求,然后就会根据规则转发给应用层框架进行处理。譬如说ASP.NETASP.NET Core、PHP、tomcat等等这些都是应用层的框架。应用层是一个承上启下的东西,通常来说WebServer或者说HTTP框架转发的请求仍然是一种低阶的二进制格式,WebServer通常不与任何具体的语言和运行时绑定或者产生关系。一般而言,WebServer可以将请求委派给任意语言和运行时处理,譬如同一个IIS上就可以同时跑PHP、ASP.NET和Java的应用。

应用层框架负责将这种低阶的二进制格式的请求和响应数据转换为对应运行时的结构化数据,在.NET就是HttpContext,并在接到请求时,分配线程,路由到不同的代码来处理请求。

所以应用层的主要逻辑就是,数据封装和路由,为应用程序提供运行时和环境

这就是ASP.NET和IIS的关系,也可以认为是ASP.NET Core和Kestrel的关系,当然也可以认为是PHP和Apache的关系,tomcat和servlet的关系。

不过目前有个趋势就是很多应用层框架会向下将WebServer的部分功能直接包含进来,这样,应用层框架就可以脱离WebServer独立运行,例如tomcat、ASP.NET Core。当然,ASP.NET也是可以独立运行的,这个超纲了就此打住。


最后是业务层,负责在应用层的基础上处理具体的业务信息,业务层框架通常都依赖于特定的应用层,例如ASP.NET MVC显然只能跑在ASP.NET上,而不可能跑在tomcat上。一个应用层上通常也可以承载多个业务层框架,例如ASP.NET MVC和ASP.NET WebForm就可以并存,虽然这样做会带来一些问题,所以在一般应用中我们不会同时使用两种框架。


这三层框架,每一层都为上一层服务,为上一层提供运行的基础。所以下层框架可以称之为上层框架的宿主

也即是,IIS是ASP.NET的宿主,ASP.NETASP.NET MVC的宿主。

如果像ASP.NET Core这样,自带了一个Kestrel来处理HTTP请求,Kestrel是ASP.NET Core的宿主,但同时也是ASP.NET Core的一部分。就可以称之为自宿主(self-host)框架。


搞清楚了这三层的关系,各种B/S开发框架的关系就可以很轻松的厘清了。

譬如说,node.js应该属于哪一层的?很显然node.js的职责是提供JS运行环境,将HTTP请求包装成JS数据结构,那他显然是应用层框架。那么它下面通常会有一个HTTP层框架,例如IIS、nginx之类。其上的话也会有很多业务开发框架来简化我们的开发工作。

而任何一个应用层框架,要么需要搭配一个WebServer宿主使用,要么它是自宿主的。




  

相关话题

  visual studio调试c#时能否像调试mfc程序时追踪进微软的源码?需要如何设定? 
  .net为什么要将应用程序编程语言统一? 
  C#里面将对象实例赋值为null会否加速GC释放资源? 
  带汉字的时间怎么转换成时间类型呢? 
  求指教搜索关键词:.net后台如何获取查询数据库得到的结果集以及如何返回给ajax? 
  想在ASP.net中整合Bootstrap的LESS源码,该怎么做? 
  SqlConnection的close必须吗? 
  带汉字的时间怎么转换成时间类型呢? 
  C# 事件效率如何? 
  Build 2015上微软宣布Windows 10支持Objective-C与Java编写的应用,这对C#与Windows自身有什么长远影响? 

前一个讨论
为何ps,Xbox必须升级最新系统才可访问应用商店,而iPhone不升级也可访问App Store?
下一个讨论
央行要统一收付款二维码,对消费者、微信和支付宝会产生什么影响?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利