多程序 面對物件 web伺服器

2021-10-06 19:19:50 字數 3244 閱讀 6214

整合解析動態請求的功能

瀏覽器請求的資源:靜態資源 + 動態資源

靜態資源:寫好的固定介面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...