php发展

首页 » 常识 » 常识 » 网站架构一篇文章让你明白后端的工作原
TUhjnbcbe - 2023/5/30 21:37:00
白癜风的治疗方法有哪些 https://m-mip.39.net/baidianfeng/mipso_7375991.html

这一期,我们来聊一聊后端部分的工作原理。后端部分的工作原理与开发语言及使用的框架是相关的,常用的后端开发语言有Java、PHP、Python、C#、Nodejs、Go等。我们这里不对比这些开发语言的优劣,因为后端程序是比较特殊的,后端程序是I/O密集型程序,并没有复杂的计算任务,后端程序的职责其实是协调其他服务。如数据库、非关系型数据库、调用第三方服务、文件读写操作等,所以不同开发语言的运行性能其实差距并不大,毕竟数据库阻塞的话,后端程序跑得再快也没用。

后面我们以Java为例介绍后端部分的工作原理,其他开发语言也可作为参考,毕竟大体上的工作原理都是一致的。

下面我们将分2个部分介绍后端程序的工作原理

1、后端部分的运行原理

2、后端程序处理接口请求

1、后端部分的运行原理

java编写的后端部分有两种结构。

一种是Web应用服务器软件+war包的形式,Web应用服务器软件一般是Tomcat、Jetty、Weblogic等。这里以Tomcat为例,后面用Tomcat+war包代指这类形式,这种方式适合于生产环境。另一种是jar包独立运行,这种方式适合于开发调试。

Tomcat+war包的工作原理是这样的,Tomcat本身是一个Java程序(实际上只有Catalina部分是Java程序),而war包其实只是一堆文件的压缩包(不是一个独立的Java程序),包括编译好的.class文件、依赖包、配置文件等Tomcat运行后,会自动解压缩war包内容,并加载相关文件。Tomcat加载这些外部文件其实是利用了Java的反射机制,通过Java工程中的固定类名ServletInitializer加载的(SpringBoot框架)。Tomcat正常加载war包内容后,当Tomcat接收到请求时,会调用已加载的.class文件中对应的接口函数,而这个接口函数一般就是我们写的Controller中的函数(SpringBoot框架)。

Tomcat+war包的工作原理是这样的,Tomcat本身是一个Java程序(实际上只有Catalina部分是Java程序),而war包其实只是一堆文件的压缩包(不是一个独立的Java程序),包括编译好的.class文件、依赖包、配置文件等Tomcat运行后,会自动解压缩war包内容,并加载相关文件。Tomcat加载这些外部文件其实是利用了Java的反射机制,通过Java工程中的固定类名ServletInitializer加载的(SpringBoot框架)。

Tomcat正常加载war包内容后,当Tomcat接收到请求时,会调用已加载的.class文件中对应的接口函数,而这个接口函数一般就是我们写的Controller中的函数(SpringBoot框架)。

当多个请求同时来临时,Tomcat会启动多个线程同时处理这些请求,线程启动的上限、超时、最大等待数等配置可以在Tomcat中配置,这种同时处理多个请求的场景也就是并发处理。这里的设置是很重要的,决定着后端的性能,而且在请求量过大时,也能保证Tomcat正常运行,不至于宕机,在后续介绍并发调优时,我们会深入讲解。

Tomcat+war包的工作原理就是这样,但是我们常常遇到一个问题,当Tomcat长时间运行,特别是开启了自动解压缩替换war包功能后,往往Tomcat会因为内存枯竭而崩溃退出,这是因为没设置好Tomcat的JVM内存参数,才会导致内存枯竭,内存参数设置在Tomcat中配置即可。

至于另一种jar包独立运行,jar包其实就是一个Java程序,所以无需依赖Tomcat即可运行,它是通过Java工程中的Application类中的main函数启动的(SpringBoot框架),其工作原理与Tomcat+war基本相同,只是没有加载外部文件的动作。

2、后端接口处理请求的工作原理

这里我们以Tomcat+war的形式介绍,发送一个请求时,至少需要明确URL、请求方式、数据格式、请求数据这四个部分。发送请求到后端程序,实际是3个步骤:

1、客户端先根据URL中的域名(IP)和端口与Tomcat建立连接。

2、把请求报文发送给Tomcat,请求报文其实就是文本信息,里面记录了URL、请求方式、请求数据等。

3、Tomcat根据请求报文中的URL路径和请求方式找到对应的war包中的函数,并把请求报文信息(包括请求数据等)转换成对象后作为参数传入。

当后端程序处理完请求后,Tomcat会自动整理返回报文并发送给客户端(实际是Servlet自动处理的),返回的报文中的数据部分是war包中的接口函数返回的,至于其他部分(如头信息、状态码等)是自动填充的(Servlet自动处理的)。当然,也可以在Java代码中通HttpServletRequest对象修改的。

以上就是后端工作原理的全部内容,如果观看的小伙伴还有疑问,可以在评论区留言。

另外,虽然本期我们只介绍了Java后端的工作原理,但是其他语言的工作原理也是雷同的,因为后端程序是一种特定的软件形态,无论用什么语言开发其基本的程序骨架都是一样的。

1
查看完整版本: 网站架构一篇文章让你明白后端的工作原