百科问答小站 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宿主使用,要么它是自宿主的。




  

相关话题

  C#每个类代码一大坨,有什么好的方能展示他的公有方法和属性? 
  C#中的typeof()是一个函数吗? 
  什么情况下使用异常处理? 
  为什么C#的.NET库不默认提供「优先队列」容器? 
  为什么一说到 C#,很多人都说跟微软绑太紧,说到 Objective-C,就没人说跟苹果绑太紧呢? 
  微软开放.net框架源代码后,未来的发展有哪些可期待的? 
  Java 8 的 stream API 和 C# 的 LINQ 哪个更慢? 
  我的一位老师说,Java 适用于大型软件而 C# 适用中小型软件。这是真的么? 
  大三下学期了,比较熟悉C#但哪都看到JAVA薪资和发展都比.net好,想转学JAVA,还来得及吗? 
  c# 怎么将object类型转换为string[][]类型? 

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





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利