Flask框架小程序后端分離開(kāi)發(fā)學(xué)習(xí)筆記《2》構(gòu)建基礎(chǔ)的HTTP服務(wù)器
Flask是使用python的后端,由于小程序需要后端開(kāi)發(fā),遂學(xué)習(xí)一下后端開(kāi)發(fā)。本節(jié)提供一個(gè)構(gòu)建簡(jiǎn)單的本地服務(wù)器的代碼,仔細(xì)看注釋?zhuān)瑢W(xué)習(xí)每一步的流程,理解服務(wù)器接收請(qǐng)求,回復(fù)響應(yīng)的基本原理。
import socket
# 這個(gè)程序就是一個(gè)套路程序,套路程序
# 沒(méi)必要思考為什么會(huì)龍區(qū)年#記住套路,能用,就夠了
# 運(yùn)行這個(gè)程序后,瀏覽器打開(kāi)localhost:2000就能訪問(wèn)了
# 服務(wù)器的host為空字符串,表示接受任意ip地址的連接
# post是端口,這里設(shè)置為2000,隨便選的一個(gè)數(shù)字(盡量1024以上,以下是操作系統(tǒng)保留的端口)
host = ''
port = 2000
#s是—個(gè)socket實(shí)例
s = socket.socket()
#s.bind用于綁定(因?yàn)榉?wù)器有一個(gè)固定的端口,所以需要綁定host和port)
#注意bind 函數(shù)的參數(shù)是一個(gè)tuple
s.bind((host, port))
#用一個(gè)無(wú)限循環(huán)采處理請(qǐng)求
while True:
# 套路,先要s.listen開(kāi)始監(jiān)聽(tīng)
# 注意參數(shù)5的含義不必關(guān)心
s.listen(5)
# 當(dāng)有客戶(hù)端過(guò)來(lái)連接的時(shí)候,s.accept函數(shù)就會(huì)返回2個(gè)值
# 分別是 連接 和 客戶(hù)端ip 地址
# 其實(shí)程序是在這等著接收連接呢
connection, address = s.accept()
# recv 可以接收客戶(hù)端發(fā)送過(guò)來(lái)的數(shù)據(jù)
# 參數(shù)是要接收的字節(jié)數(shù)
# 返回值是一個(gè)bytes類(lèi)型(隨便寫(xiě)的,1024是長(zhǎng)度,只接收客戶(hù)端發(fā)送的1024字節(jié),我們之后可以用while持續(xù)接收)
request = connection.recv(1024)
# bytes類(lèi)型調(diào)用decode ( ' utf-8 ')來(lái)轉(zhuǎn)成一個(gè)字符串( str)
print('ip and request,{}\n{}'.format(address, request.decode('utf-8')))
# b''表示這是一個(gè)bytes 對(duì)象
response = b'HTTP/1.1 200 hao\r\n\r\n<h1>Hello world!</h1>'
# 用sendall發(fā)送給客戶(hù)端
connection.sendall(response)
# 發(fā)送完畢后,關(guān)閉本次連接
connection.close()
代碼效果,運(yùn)行之后,在瀏覽器輸入:localhost:2000
總結(jié)
1.導(dǎo)入socket庫(kù):這個(gè)庫(kù)用于網(wǎng)絡(luò)通信。
2創(chuàng)建Socket對(duì)象:使用‘socket.socket()*創(chuàng)建了一個(gè)socket實(shí)例,這是網(wǎng)絡(luò)通信的基礎(chǔ)。
3.綁定Host和Port:使用s.bind((host,port))綁定主機(jī)地址和端口號(hào)。這里,主機(jī)地址設(shè)置為空字符串,這意味著服務(wù)器將接受來(lái)自任意IP地址的連接。端口號(hào)設(shè)置為2000,通常選擇大于1024的值,因?yàn)?024以下的端口可能被系統(tǒng)占用。
4.監(jiān)聽(tīng)連接:通過(guò)‘s.listen(5)·開(kāi)始監(jiān)聽(tīng)端口。數(shù)字5是backlog"的值,它定義了等待接受的最大連接數(shù)。
5.接受連接:在一個(gè)無(wú)限循環(huán)中,使用s.accept()
接受客戶(hù)端的連接請(qǐng)求。這個(gè)函數(shù)返回連接對(duì)象和客戶(hù)端的地址。
6.處理請(qǐng)求:使用connection.recv(1024)接收來(lái)自客戶(hù)端的數(shù)據(jù)。這里,1024指定了最大的數(shù)據(jù)接收量(字節(jié)為單位)。
7.發(fā)送響應(yīng):構(gòu)建一個(gè)簡(jiǎn)單的HTTP響應(yīng)消息并通過(guò)connection.sendall(response)發(fā)送回客戶(hù)端。這里的響應(yīng)是一個(gè)簡(jiǎn)單的HTML文檔。
8.關(guān)閉連接:用connection.close()關(guān)閉連接。
總結(jié)來(lái)說(shuō),這段代碼演示了一個(gè)非常基礎(chǔ)的HTTP服務(wù)器的工作原理,包括接收客戶(hù)端連接、處理請(qǐng)求并發(fā)送一個(gè)簡(jiǎn)單的HTTP響應(yīng)。這種服務(wù)器可以在本地運(yùn)行,并通過(guò)在瀏覽器中訪問(wèn)localhost:2000進(jìn)行測(cè)試。不過(guò),它非?;A(chǔ),沒(méi)有實(shí)現(xiàn)許多真實(shí)服務(wù)器所必需的功能和安全性考慮。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-800619.html
本筆記是學(xué)習(xí)B站某視頻的教程,作為一個(gè)自己的學(xué)習(xí)記錄,侵刪。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-800619.html
到了這里,關(guān)于Flask框架小程序后端分離開(kāi)發(fā)學(xué)習(xí)筆記《2》構(gòu)建基礎(chǔ)的HTTP服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!