服务器端编程的本质用一句话来概括就是解决客户端进程和服务端进程之间的通信和数据交换问题。
下面我们就要思考两个问题:
第一个是两个进程如何通信?
通常通过操作系统提供的socket系统调用来进行TCP连接。(IPC方法很多,并不只有socket)
第二个是如何保证双方互相理解?
需要建立相应的规则,这也就是我们所谓的协议。
以Python web开发为例,一个http请求过程要经过:
浏览器—>web服务器—>WSGI服务器—->web 应用程序—->数据库客户端—->数据库服务器
浏览器本质是就是一个htttp客户端,而web服务器就是一个http服务端,通常web开发会通过网关协议来实现web服务器和应用程序的解耦,以Python web开发为例,Python的网关协议为WSGI,真实环境中我们还需要一个将http请求解析为符合WSGI需求的数据结构(一个环境变量字典)的WSGI服务器,则此时web服务器就相当于WSGI客户端,WSGI服务器就是WSGI服务端,而web应用被WSGI服务器调用,来处理http请求和生成响应的http应答,通常web应用需要操控数据库进行增删查改,而操控数据库的本质就是建立一个数据库的客户端,将sql语句转换为符合数据库通信协议的请求发送给数据库的服务端,服务端再生成响应的应答给应用程序,这就是通过编程语言对数据库进行增删查改的本质。
web框架和数据库客户端的本质:
web框架将解析和生成HTTP协议这个公共的,重复的过程自动化,使得web开发只需要用视图函数建立URL和函数之间的映射关系,然后返回写好的HTML文件。
数据库客户端也是相似的,将生成和解析数据库通信协议的过程自动化,使得操控数据库只用调用方法,并且写入相应数据库语句。