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...