前言
其实大家大可不必被服务器这三个字吓到,一个入门级后端框架,所需的仅仅是HTTP相关的知识与应用这些知识的编程工具。据本人的经验,绝大多数人拥有搭建后端所涉及到的基础理论知识,但是缺乏能将之应用出去的工具,而本文即是交给读者这样一个工具,并能够运用之来实现一个可用的后端。
本文以基础理论知识的运用为主,并不会在服务器的稳定性安全性上做探究,同时为了避免大家在实现中被各种编程语言的独有特性所困扰,本文选用选Python作为编程语言,并会附上详细的代码。
一、最初的尝试
超文本传输协议(HyperText Transfer Protocol)是迄今为止互联网应用最为广泛的协议,平时大家在浏览器上浏览网页,逛淘宝,刷博客,上知乎均是基于这种协议。
在互联网七层架构中HTTP位于TCP/UDP之上,这意味着我们我们可以在TCP/UDP层收发HTTP层的数据,而能够帮助我们在TCP/UDP层收发数据的最原始的一个工具——套接字。
几乎每一门编程语言都会原生支持套接字,所以本文选用套接字讲解,而非python语言本身拿手的第三方库,套接字与基础知识之间直接对接,这样不仅简化学习成本,同时易于读者从底层了解学习HTTP,也便于理解各种第三方库的实现机理,可谓一举三得。
在套接字的帮助下,我们可以写下第一个服务器端的框架:
#coding=utf-8
import re
from socket import *
def handle_request(request):
return 'Welcome to wierton\'s site'
s = socket(AF_INET, SOCK_STREAM)
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
s.bind(('127.0.0.1', 8080))
s.listen(10)
while 1:
conn,addr = s.accept()
print("connected by {}".format(addr))
recv_data = conn.recv(64*1024)
resp_data = handle_request(recv_data)
conn.sendall(resp_data)
conn.close()
s.close()
上述框架能够干嘛呢?想要实验上述代码的效果,你只要在浏览器中输入127.0.0.1:8080
,然后你就会看到一行字符串Welcome to wierton's site.
,如图:
怎么样,是不是很有成就感,你的代码“成功”响应了浏览器的请求并回复了一个你设定好的字符串。
或许新入门的你对上述代码有所疑惑,不着急,我们来慢慢过一遍上述代码。
s = socket(AF_INET, SOCK_STREAM)
创建一个流式套接字用于TCP通信
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
设定当前套接字,使其允许被复用
s.bind(('127.0.0.1', 8080))
将当前套接字绑定到ip地址为127.0.0.1,端口号为8080的连接上
注:虽然HTTP默认端口为80,但在linux下,监听80号端口需要root权限。
s.listen(10)
监听当前套接字,设定并发数为10,即在多客户端并发请求时,第11个及其以后的连接请求会被拒绝
conn,addr = s.accept()
响应一个连接请求
recv_data = conn.recv(64*1024)
接收来自客户端的数据,并设置缓冲区大小为64KB
resp_data = handle_request(recv_data)
处理请求内容,并生成回复字串
conn.sendall(resp_data)
发送回复字串</