自己寫的HTTP V2 0版本

2021-09-01 00:20:48 字數 3526 閱讀 8360

1.接收客戶端請求

2.解析客戶端請求

3.組織資料,形成http response

4.將資料傳送給客戶端

公升級1.採用多執行緒併發接受多個客戶端請求,(迴圈伺服器程式,乙個沒做好另乙個需要等待)

2.基本的請求解析,根據請求返回相應的內容

3.除了可以請求靜態網頁,也可以請求簡單的資料

4.將功能封裝在乙個類中

公升級的技術點:

1.socket tcp套接字

2.http寫乙個請求響應格式

3.執行緒併發的建立方法

4.類的基本使用

主要學習類的封裝思想

1.多執行緒併發

2.可以請求簡單資料

3.能進行簡單請求解析

4.結構使用類進行封裝

『』』from socket import *

from threading import thread

import sys

import traceback

#httpserver類 封裝具體的伺服器功能

#建立套接字

self.create_socket()

def create_socket(self):

self.sockfd=socket()

self.sockfd.setsockopt(sol_socket,so_reuseaddr,1)

self.sockfd.bind(self.server_address)

#設定監聽,等待客戶端連線

def serve_forever(self):

self.sockfd.listen(5)

print('listen the port %d'%self.port)

while true:

try:

connfd,addr=self.sockfd.accept()

except keyboardinterrupt:

self.sockfd.close()

sys.exit('退出伺服器')

except exception:

traceback.print_exc()

continue

#建立新的執行緒處理請求

clientthread=thread(target=self.handlerequest,\

args=(connfd,))

clientthread.setdaemon(true)

clientthread.start()

#客戶端請求函式

def handlerequest(self,connfd):

#接收客戶端請求

request=connfd.recv(4096)

#解析請求內容

requestheaders=request.splitlines()

print(connfd.getpeername(),':',requestheaders[0])

#獲取具體請求內容 b'get /abc.html http/1.1'

getrequest=str(requestheaders[0]).split(' ')[1]

if getrequest=='/' or getrequest[-5:]=='.html':

self.get_html(getrequest,connfd)

else:

self.get_data(connfd,getrequest)

connfd.close()

def get_html(self,getrequest,connfd):

if getrequest=='/':

filename=self.static_dir+'/index.html'

else:

filename=self.static_dir+getrequest

try:

f=open(filename)

except exception:

#沒找到頁面

response+='\r\n'#空行

response+='\r\n'#空行

response+=f.read()

f.close()

finally:

#傳送給瀏覽器

connfd.send(response.encode())

def get_data(self,connfd,getrequest):

urls=['/time','/tedu','/python']

if getrequest in urls:

#沒找到頁面

response+='\r\n'#空行

if getrequest=='/time':

import time

response+=time.ctime()

elif getrequest=='/tedu':

response+='welcome to tedu'

elif getrequest=='/python':

response+='人生苦短我用python'

else:

#沒找到頁面

response+='\r\n'#空行

response+='====sorry not found*****='

connfd.send(response.encode())

ifname== 『main』:

#伺服器ip

server_addr=(『0.0.0.0』,8000)

#提供靜態網頁(位址),我的靜態頁面儲存目錄static

static_dir=』./static』

#生成伺服器物件

#啟動伺服器

Yii2 0 版本公升級

框架公升級不是必須的,但是可以避免未知的bug以及新功能的使用 第一種 直接在頁面echo yii getversion 第二種 使用命令視窗 在專案目錄下有乙個yii的檔案,直接執行這個檔案 yii 日誌 可以跟看到這一次的版本公升級解決了說明bug之類的 說明 可能有什麼新的方法新增,以及本版本...

eos2 0版本更新

開工第一天 1 新建乙個虛擬機器 因為目前的eos系統暫時沒有辦法在原來的版本上直接更新,只有先重新裝乙個虛擬機器 2 安裝好後,首先再裝乙個vmwaretools 3 裝eosio的release wget sudo apt install eosio 2.0.0 1 ubuntu 18.04 a...

關於Python2 0版本與3 0版本中類的區別

在2.0中類的定義是可以通過定義函式的形class person def init self,name,age,gender print 進入person的初始化 self.name name self.age age self.gender gender print 離開person的初始化 de...