.NET 平台中有很多 BS 框架,能介绍一下他们之间的关系和实用价值吗?
时间:2023-11-28 16:00:01 | 来源:网站运营
时间:2023-11-28 16:00:01 来源:网站运营
.NET 平台中有很多 BS 框架,能介绍一下他们之间的关系和实用价值吗?:从层次结构上来分,BS开发的框架,分为三个层次:
当然这里的层次名称都是
我随便瞎编的,主要是方便理解不同的框架运作的位置。
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请求,然后就会根据规则转发给应用层框架进行处理。譬如说
http://ASP.NET、
http://ASP.NET Core、PHP、tomcat等等这些都是应用层的框架。应用层是一个承上启下的东西,通常来说WebServer或者说HTTP框架转发的请求仍然是一种低阶的二进制格式,WebServer通常不与任何具体的语言和运行时绑定或者产生关系。一般而言,WebServer可以将请求委派给任意语言和运行时处理,譬如同一个IIS上就可以同时跑PHP、
http://ASP.NET和Java的应用。
应用层框架负责将这种低阶的二进制格式的请求和响应数据转换为对应运行时的结构化数据,在.NET就是HttpContext,并在接到请求时,分配线程,路由到不同的代码来处理请求。
所以应用层的主要逻辑就是,
数据封装和路由,为应用程序提供运行时和环境。
这就是
http://ASP.NET和IIS的关系,也可以认为是
http://ASP.NET Core和Kestrel的关系,当然也可以认为是PHP和Apache的关系,tomcat和servlet的关系。
不过目前有个趋势就是很多应用层框架会向下将WebServer的部分功能直接包含进来,这样,应用层框架就可以脱离WebServer独立运行,例如tomcat、
http://ASP.NET Core。当然,
http://ASP.NET也是可以独立运行的,这个超纲了就此打住。
最后是业务层,负责在应用层的基础上处理具体的业务信息,业务层框架通常都依赖于特定的应用层,例如
http://ASP.NET MVC显然只能跑在
http://ASP.NET上,而不可能跑在tomcat上。一个应用层上通常也可以承载多个业务层框架,例如
http://ASP.NET MVC和
http://ASP.NET WebForm就可以并存,虽然这样做会带来一些问题,所以在一般应用中我们不会同时使用两种框架。
这三层框架,每一层都为上一层服务,为上一层提供运行的基础。
所以下层框架可以称之为上层框架的宿主。
也即是,IIS是
http://ASP.NET的宿主,
http://ASP.NET是
http://ASP.NET MVC的宿主。
如果像
http://ASP.NET Core这样,自带了一个Kestrel来处理HTTP请求,Kestrel是
http://ASP.NET Core的宿主,但同时也是
http://ASP.NET Core的一部分。就可以称之为自宿主(self-host)框架。
搞清楚了这三层的关系,各种B/S开发框架的关系就可以很轻松的厘清了。
譬如说,node.js应该属于哪一层的?很显然node.js的职责是提供JS运行环境,将HTTP请求包装成JS数据结构,那他显然是应用层框架。那么它下面通常会有一个HTTP层框架,例如IIS、nginx之类。其上的话也会有很多业务开发框架来简化我们的开发工作。
而任何一个应用层框架,要么需要搭配一个WebServer宿主使用,要么它是自宿主的。