自己动手web服务器04-多进程
2018-01-10 15:39
281 查看
利用知识:
1.TCP服务器的创建
2.多进程知识 Threading.Thread
3.with 上下文管理器
4.正则表达式
5.响应报文格式 状态码
6.try...except...else的用法
import
socket
import re
import multiprocessing
def request_handler(client_socket):
# 客户端接受请求
recv_data = client_socket.recv(4096)
if not
recv_data:
print("客户端断开链接")
client_socket.close()
return
# 解码请求报文数据
recv_str_data = recv_data.decode()
# 截取路径正则表达式
ret = re.match(r"[^/]+([^ ])+", recv_str_data)
path_info = ret.group(1)
print(path_info)
# 当用户只输入域名(IP) + [端口] 用户请求路径是/
if
path_info == "/":
path_info = "/index.html"
try:
try...except...else的用法
with
open("./static"
+ path_info, "rb")
as file:
file_data = file.read()
except
Exception as
e:响应报文格式 状态码
reponce_line = "HTTP/1.1 404 Not\r\n"
reponce_hearder =
"Server:PythonServer1.0"
reponce_body =
"ERROR"
# 响应数据的拼接
reponce_data = reponce_line + reponce_hearder +
"\r\n"
+ reponce_body
client_socket.send(reponce_data.encode())
else:响应报文格式 状态码
reponce_line = "HTTP1.1 200 OK\r\n"
reponce_hearder =
"Server:PythonServer1.0\r\n"
reponce_body = file_data
# 响应数据的拼接 因前面是二进制,不能直接拼接,需要转化
reponce_data = (reponce_line + reponce_hearder +
"\r\n").encode() + reponce_body
client_socket.send(reponce_data)
finally:
client_socket.close()
if __name__ ==
'__main__':
# 创建套接字TCP服务器的创建
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server_socket.bind(("",8888))
server_socket.listen(128)
while True:# 接收
client_socket, client_address = server_socket.accept()
# 打印
print("接收到%s链接请求"
% str(client_address))
多进程知识
thid = multiprocessing.Process(target=request_handler,
args=(client_socket))
thid.start()
1.TCP服务器的创建
2.多进程知识 Threading.Thread
3.with 上下文管理器
4.正则表达式
5.响应报文格式 状态码
6.try...except...else的用法
import
socket
import re
import multiprocessing
def request_handler(client_socket):
# 客户端接受请求
recv_data = client_socket.recv(4096)
if not
recv_data:
print("客户端断开链接")
client_socket.close()
return
# 解码请求报文数据
recv_str_data = recv_data.decode()
# 截取路径正则表达式
ret = re.match(r"[^/]+([^ ])+", recv_str_data)
path_info = ret.group(1)
print(path_info)
# 当用户只输入域名(IP) + [端口] 用户请求路径是/
if
path_info == "/":
path_info = "/index.html"
try:
try...except...else的用法
with
open("./static"
+ path_info, "rb")
as file:
file_data = file.read()
except
Exception as
e:响应报文格式 状态码
reponce_line = "HTTP/1.1 404 Not\r\n"
reponce_hearder =
"Server:PythonServer1.0"
reponce_body =
"ERROR"
# 响应数据的拼接
reponce_data = reponce_line + reponce_hearder +
"\r\n"
+ reponce_body
client_socket.send(reponce_data.encode())
else:响应报文格式 状态码
reponce_line = "HTTP1.1 200 OK\r\n"
reponce_hearder =
"Server:PythonServer1.0\r\n"
reponce_body = file_data
# 响应数据的拼接 因前面是二进制,不能直接拼接,需要转化
reponce_data = (reponce_line + reponce_hearder +
"\r\n").encode() + reponce_body
client_socket.send(reponce_data)
finally:
client_socket.close()
if __name__ ==
'__main__':
# 创建套接字TCP服务器的创建
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server_socket.bind(("",8888))
server_socket.listen(128)
while True:# 接收
client_socket, client_address = server_socket.accept()
# 打印
print("接收到%s链接请求"
% str(client_address))
多进程知识
thid = multiprocessing.Process(target=request_handler,
args=(client_socket))
thid.start()
相关文章推荐
- 自己动手架设linux下Web服务器(图)2
- 自己动手写的Web服务器<一>
- 自己动手写web服务器(下),深入底层了解ASP.NET浏览器与服务器通信原理
- 自己动手架设linux下Web服务器(图)3
- 自己动手web服务器06-协程
- 自己动手架设linux下Web服务器(图)4
- 自己动手实现一个WEB服务器
- 自己动手写web服务器四(web服务器是如何通过压缩数据,web服务器的gzip模块的实现)
- 自己动手写web服务器之虚拟端口支持
- 自己动手打造WEB服务器 Windows + Apache + PHP + MySQL
- 自己动手写web服务器一(浏览器的访问信息)
- 自己动手架设linux下Web服务器(图)5
- 自己动手实现一个WEB服务器
- 自己动手开发一个 Web 服务器(一)
- 自己动手开发一个 Web 服务器(二)
- 自己动手写web服务器二(处理get请求)
- 自己动手写web服务器三(web服务器是如何处理浏览器取消的请求的)
- 自己动手架设linux下Web服务器(图)6
- 自己动手web服务器06--面向对象(II)
- 自己动手开发一个 Web 服务器(一)