您的位置:首页 > 其它

自己动手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()

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: