分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Web静态服务器-3-多进程

发布时间:2023-09-06 02:34责任编辑:郭大石关键词:Web
#coding=utf-8import socketimport reimport multiprocessingclass WSGIServer(object): ???def __init__(self, server_address): ???????# 创建一个tcp套接字 ???????self.listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ???????# 允许立即使用上次绑定的port ???????self.listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) ???????# 绑定 ???????self.listen_socket.bind(server_address) ???????# 变为被动,并制定队列的长度 ???????self.listen_socket.listen(128) ???def serve_forever(self): ???????"循环运行web服务器,等待客户端的链接并为客户端服务" ???????while True: ???????????# 等待新客户端到来 ???????????client_socket, client_address = self.listen_socket.accept() ???????????print(client_address) ?# for test ???????????new_process = multiprocessing.Process(target=self.handleRequest, args=(client_socket,)) ???????????new_process.start() ???????????# 因为子进程已经复制了父进程的套接字等资源,所以父进程调用close不会将他们对应的这个链接关闭的 ???????????client_socket.close() ???def handleRequest(self, client_socket): ???????"用一个新的进程,为一个客户端进行服务" ???????recv_data = client_socket.recv(1024).decode(‘utf-8‘) ???????print(recv_data) ???????requestHeaderLines = recv_data.splitlines() ???????for line in requestHeaderLines: ???????????print(line) ???????request_line = requestHeaderLines[0] ???????get_file_name = re.match("[^/]+(/[^ ]*)", request_line).group(1) ???????print("file name is ===>%s" % get_file_name) # for test ???????if get_file_name == "/": ???????????get_file_name = DOCUMENTS_ROOT + "/index.html" ???????else: ???????????get_file_name = DOCUMENTS_ROOT + get_file_name ???????print("file name is ===2>%s" % get_file_name) # for test ???????try: ???????????f = open(get_file_name, "rb") ???????except IOError: ???????????response_header = "HTTP/1.1 404 not found\r\n" ???????????response_header += "\r\n" ???????????response_body = "====sorry ,file not found====" ???????else: ???????????response_header = "HTTP/1.1 200 OK\r\n" ???????????response_header += "\r\n" ???????????response_body = f.read() ???????????f.close() ???????finally: ???????????client_socket.send(response_header.encode(‘utf-8‘)) ???????????client_socket.send(response_body) ???????????client_socket.close()# 设定服务器的端口SERVER_ADDR = (HOST, PORT) = "", 8888# 设置服务器服务静态资源时的路径DOCUMENTS_ROOT = "./html"def main(): ???httpd = WSGIServer(SERVER_ADDR) ???print("web Server: Serving HTTP on port %d ...\n" % PORT) ???httpd.serve_forever()if __name__ == "__main__": ???main()

Web静态服务器-3-多进程

原文地址:https://www.cnblogs.com/jyue/p/10468703.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved