整合解析動態請求的功能
瀏覽器請求的資源:靜態資源 + 動態資源
靜態資源:寫好的固定介面http/css/js/png/jpg等
動態資源:重新生成製作的介面
# coding:utf-8
import socket
import re
import multiprocessing
import time
class wsgiserver(object):
def __init__(self):
# 1.建立套接字
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.變為監聽套接字
self.tcp_server_socket.listen(128)
def service_client(self, new_socket):
# 1.接收瀏覽器傳送過來的請求,即http請求
# 2.返回http格式的資料給瀏覽器
# 2.1 如果請求的資源部署以.py結尾,那麼就認為是靜態資源(http/css/js/png/jpg等)
# header傳送給伺服器
new_socket.send(response.encode('utf-8'))
# body傳送給伺服器
new_socket.send(html_content)
else:
# 2.2 如果是以.py結尾,那麼就認為是動態資源的請求
# 傳送response給瀏覽器
new_socket.send(response.encode('utf-8'))
def run_forever(self):
while true:
# 等待客戶端連線
new_socket, client_addr = self.tcp_server_socket.accept()
p = multiprocessing.process(target=self.service_client, args=(new_socket,))
p.start()
new_socket.close()
self.tcp_server_socket.close()
def main():
'''控制整體,建立乙個web伺服器物件,然後呼叫這個物件的run_forever方法執行'''
wsgi_server = wsgiserver()
wsgi_server.run_forever()
if __name__ == '__main__':
main()
將web伺服器和邏輯處理的**分開
新建乙個模組mini_frame
# coding:utf-8
import time
# 登陸
def login():
return 'welcome to login......time: %s' % time.ctime()
# 註冊
def register():
return 'welcome to register......time: %s' % time.ctime()
# 介紹
def profile():
return 'welcome to profile......time: %s' % time.ctime()
if file_name == '/login.py':
login()
elif file_name == 'register.py'
register()
elif file_name == 'profile'
profile()
else:
return 'not found you page....'
解耦
else:
# 2.2 如果是以.py結尾,那麼就認為是動態資源的請求
response = header + str(body) # body空值會報錯
# 傳送response給瀏覽器
new_socket.send(response.encode('utf-8'))
Web伺服器 併發伺服器 多程序(3 4 1)
目錄 在單程序的時候,相當於 是來乙個客戶,派乙個人去服務一下 效率低,現在使用多程序來服務 假設場景 100個人同時訪問頁面 單程序 一次處理,後面的會等待時間長 多程序 併發處理,一起處理 當然程序不能越多越好,硬體不支援 執行緒的開銷比程序少,但最好使用協程 注意 用process來建立子程序...
Web靜態伺服器03 多程序
coding utf 8 import socket import re import multiprocessing class wsgiserver object def init self,server address 建立乙個tcp套接字 self.listen socket socket....
多程序伺服器
基於tcp實現多程序伺服器 伺服器端 1 建立套接字 include include int socket int domain,int type,int protocol domain 乙個位址描述。目前僅支援af inet格式,也就是說arpa internet位址格式。type 指定socke...