web伺服器物件導向 長連線

2021-08-20 05:43:13 字數 2751 閱讀 4821

from gevent import monkey

monkey.patch_all()  # 打補丁

import socket

import re

import gevent

import sys

class webserver(object):

def __init__(self, port):

"""初始化伺服器套接字"""

# 初始化伺服器套接字

self.server_soc = socket.socket(socket.af_inet, socket.sock_stream)

self.server_soc.setsockopt(socket.sol_socket, socket.so_reuseaddr, 1)  # 設定套接字復用位址

self.server_soc.bind(("", port))

self.server_soc.listen(128)

def startup(self):

"""開啟伺服器"""

while true:

# 獲取客戶端連線

print('等待客戶端連線~~')

client_soc, client_addr = self.server_soc.accept()

# 為乙個客戶端提供服務

gevent.spawn(self.handle_client, client_soc)

# 關閉伺服器套接字

server_soc.close()

def handle_client(self, client_soc):

"""處理乙個客戶端的請求"""

# 獲取請求頭

recv_data = client_soc.recv(1024*4)

print(recv_data)

if not recv_data:

print('客戶端關閉連線')

client_soc.close()

return

# 獲取使用者請求的資源路徑

# 讀取檔案內容

with open('html' + path,'rb') as file:

file_content = file.read()

# 返回響應資料

# 讀取 404 檔案內容

with open('html/404.html','rb') as file:

file_content = file.read()

# 處理響應資料

# 關閉客戶端套接字

"""從瀏覽器請求裡解析出資源路徑"""

# 獲取到請求行

head_list = re.split(r'\r\n', request)

# print(head_list)

request_line = head_list[0]

# 獲取到請求的資源路徑

datas = re.split(r' ', request_line)

# print(datas)

# 對路徑的安全檢查

path = datas[1]

if path == '/':

path = '/index.html'

return path

def main():

"""開發乙個能夠響應瀏覽器請求的 web 伺服器"""

if len(sys.argv) < 2:

print('必須在終端引數裡指定埠號')

return

# 獲取啟動引數

port = int(sys.argv[1])

# print(port)

# 建立伺服器

server = webserver(port)

# 開啟伺服器

server.startup()

if __name__ == '__main__':

main()

#新增內容不大,注意下面兩點

#keep-alive\r\n'

#content-length:%d\r\n' 

TCP伺服器非堵塞物件導向長連線

def main server socket init server run server server socket tcp server webserver tcp server.run server class webserver object def run server self 執行服務...

Web伺服器 併發伺服器 長連線(3 4 4)

每次new socket都被強制關閉,造成短連線 所提不要關閉套接字 但是不關閉的話,瀏覽器不知道發完沒有啊 此時用到header的屬性content length 將http body的長度裝到返回頭,送出給瀏覽器 當瀏覽器獲取完資料了之後,就不會再載入了 設定非堵塞 tcp sever sock...

Web伺服器 併發伺服器 長連線(3 4 4)

目錄 每次new socket都被強制關閉,造成短連線 所提不要關閉套接字 但是不關閉的話,瀏覽器不知道發完沒有啊 此時用到header的屬性content length 將http body的長度裝到返回頭,送出給瀏覽器 當瀏覽器獲取完資料了之後,就不會再載入了 設定非堵塞 tcp sever s...