web服務器支持WSGL

import socket

import re

import multiprocessing

import time

import mini_frame027

class WSGTServer(object):

def __init__(self):

# 1、創(chuàng)建套接字

self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 2、綁定

self.tcp_server_socket.bind(("", 7890))# 空代表任何端口都可以

# 3、變?yōu)楸O(jiān)聽套接字(最大鏈接數128)

self.tcp_server_socket.listen(128)# 調用listen變?yōu)楸粍?/p>

def service_client(self,new_socket):

# 為這個客戶端返回數據

# 1、接收瀏覽器發(fā)送過來的請求

# GET / HTTP/1.1

# ......

request = new_socket.recv(1024).decode("utf-8")

# print('<<<<<' * 20)

# print(request)

request_lines = request.splitlines()

print("")

print(">" * 20)

print(request_lines)

# GET /index.py HTTP/1.1

# get post put del

ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])# *:0個~~多個

file_name = ""

if ret:

file_name = ret.group(1)

print("*" * 50, file_name)

if file_name == '/':

file_name = '/絲芙蘭.html'

# 2、返回HTTP格式的數據給瀏覽器

# 2.1 如果請求的資源不是以.py結尾,那么就認為是靜態(tài)資源(html/css/js/png/jpg)

if not file_name.endswith(".py"):

try:

# f = open("../創(chuàng)維官方商場-權威官網 彩電領導者/charry.html", "rb")

f = open("../sephore" + file_name, "rb")

except:

response = "HTTP/1.1 404 NOT FOUND\r\n"

response += "\r\n"

response += "---FILE NOT FOUND---"

new_socket.send(response.encode("utf-8"))

else:

html_content = f.read()

f.close()

# 2.1準備發(fā)送給瀏覽器的Header

response = "HTTP/1.1 200 OK\r\n"

response += "\r\n"

# 2.2準備發(fā)送給瀏覽器的Body

# response += "<h1>hahaha</h1>"

# 將Response Heard 發(fā)送給瀏覽器

new_socket.send(response.encode("utf-8"))

# 將Response Body 發(fā)送給瀏覽器

new_socket.send(html_content)

else: # 2.2 如果是以.py結尾,就認為是動態(tài)資源的請求

env = dict()

env['PATH_INFO'] = file_name# 通過字典

# ['PATH_INFO':"/index.py"]#鍵是PATH_INFO,值是/index.py

body = mini_frame027.application(env, self.set_response_header)

header = "HTTP/1.1 %s\r\n" % self.status

# [('Content-Type', 'text/html')]

for temp in self.headers:

header += "%s:%s\r\n" % (temp[0], temp[1])

header += "\r\n"

response = header + body

# 發(fā)送response給瀏覽器

new_socket.send(response.encode("utf-8"))

# 關閉客戶端套接字

new_socket.close()

def set_response_header(self, status, headers):

self.status = status

self.headers = headers

self.headers = [("Server","mini_web V8.8")]# 元組-元素? 還可以有服務器的

self.headers += headers# 列表累加

def run_forever(self):

while True:

# 4、等待新客戶端的連接

new_socket, client_addr = self.tcp_server_socket.accept()

# 5、為這個客戶端服務

# service_client(new_socket)

p = multiprocessing.Process(target=self.service_client, args=(new_socket,))

p.start()

new_socket.close()

# 6、關閉監(jiān)聽套接字

self.tcp_server_socket.close()

def main():

# 用來完成整體的控制,創(chuàng)建一個web服務器對象,調用run_forever方法運行

wsgi_server = WSGTServer()

wsgi_server.run_forever()

if __name__ == '__main__':

main()

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容