多進(jìn)程web_server

import socket

import re

import multiprocessing

class WSGIServer():

? ? 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)聽套接字

? ? ? ? self.tcp_server_socket.listen(128)

? ? def server_client(self,new_socket):

? ? ? ? '''為這個客戶端返回數(shù)據(jù)'''

? ? ? ? # 1、接收瀏覽器發(fā)過來的請求,即Http請求

? ? ? ? # GET / HTTP/1.1

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

? ? ? ? request_lines = request.splitlines()

? ? ? ? print('')

? ? ? ? print('>>'*20)

? ? ? ? print(request_lines)

? ? ? ? ret = re.match(r'[^/]+(/[^ ]*)',request_lines[0])

? ? ? ? file_name = ''

? ? ? ? if ret:

? ? ? ? ? ? file_name = ret.group(1)

? ? ? ? ? ? print('*'*50,file_name)

? ? ? ? ? ? if file_name == '/':

? ? ? ? ? ? ? ? file_name = '/絲芙蘭.html'

? ? ? ? # 2、返回HTTP格式的數(shù)據(jù)給瀏覽器

? ? ? ? try:

? ? ? ? ? ? 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 準(zhǔn)備發(fā)送給瀏覽器的Header

? ? ? ? ? ? response = 'HTTP/1.1 200 OK\r\n'

? ? ? ? ? ? response += '\r\n'

? ? ? ? ? ? #2.2 準(zhǔn)備發(fā)給瀏覽器的Body

? ? ? ? ? ? new_socket.send(response.encode('utf-8'))

? ? ? ? ? ? new_socket.send(html_content)

? ? ? ? # 關(guān)閉客戶端套接字

? ? ? ? new_socket.close()

? ? def run_forever(self):

? ? ? ? while True:

? ? ? ? ? ? # 4、等待新客戶端的鏈接

? ? ? ? ? ? new_socket, client_addr = self.tcp_server_socket.accept()

? ? ? ? ? ? # 5 、為這個客戶端服務(wù)

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

? ? ? ? ? ? p.start()

? ? ? ? ? ? new_socket.close()

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

? ? ? ? self.tcp_server_socket.close()

def main():

? ? '''完成整體控制,創(chuàng)建一個web服務(wù)器對象,調(diào)用run_forever方法運行'''

? ? wsgi_server = WSGIServer()

? ? wsgi_server.run_forever()

if __name__ == '__main__':

? ? main()

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容