python的socket編程入門
Flask或者其他框架都是封裝的比較完善,我們可以不去關(guān)注路由、SESSION等到底是怎么實現(xiàn)的,現(xiàn)在我們使用socket來實現(xiàn)一個帶有注冊、登錄功能的To do網(wǎng)站,這樣能對后端框架了解的稍微更深入一點(diǎn)(當(dāng)然你也可以直接去看Flask源碼)。
主程序runserver.py代碼如下:
#!/usr/bin/env python # -*- coding:utf-8 -*- import socket from exts import Request from route import response_for_request from datetime import datetime def run_server(host='', port=1207): # 建立一個socket.socket()類s with socket.socket() as s: # 設(shè)置s在服務(wù)端關(guān)閉后馬上釋放端口,避免Address already in use錯誤 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 綁定host和port s.bind((host, port)) while 1: # 開始監(jiān)聽傳入連接,可以掛起的最大連接數(shù)為5 s.listen(5) # 接受連接,根據(jù)buffer_size不斷讀取內(nèi)容 connection, address = s.accept() r = '' buffer_size = 1024 while 1: data = connection.recv(1024).decode('utf-8') r += data if len(data) < buffer_size: break # 防止瀏覽器傳空請求過來 if len(r.split()) < 2: continue # 最后取得的r是一個http請求頭字符串,對其解析,然后使用sendall返回相應(yīng)的內(nèi)容 request = Request(r) # 每次請求時打印時間,請求的方法和路徑 print(str(datetime.now())[:19], request.method, request.path) response = response_for_request(request) connection.sendall(response) connection.close() if __name__ == '__main__': run_server()
run_server函數(shù)代碼的簡單說明可以看注釋;from exts import Request:從exts導(dǎo)入一個Request類,這個Request類是自己編寫的,用于解析http請求頭,這部分是很簡單的,在網(wǎng)上搜索http請求相關(guān)內(nèi)容,就可以自行寫一個,包括返回請求頭的路徑、方法、各個字段以及body部分等,都是字符串相關(guān)的操作。
from route import response_for_request:從route.py導(dǎo)入相應(yīng)函數(shù),即傳入一個上一步中的Request類,返回對應(yīng)的網(wǎng)頁內(nèi)容,具體實現(xiàn)將在后續(xù)講解。
可以說,主程序就已經(jīng)編寫好了,整個邏輯也很簡單,使用socket監(jiān)聽連接,解析請求,返回請求對應(yīng)的內(nèi)容。后續(xù)只要去處理解析請求和響應(yīng)部分即可,主程序可以不用再修改。
相關(guān)文章
python 獲取當(dāng)前目錄下的文件目錄和文件名實例代碼詳解
這篇文章主要介紹了python 獲取當(dāng)前目錄下的文件目錄和文件名實例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03Windows下anaconda安裝第三方包的方法小結(jié)(tensorflow、gensim為例)
conda的設(shè)計理念——conda將幾乎所有的工具、第三方包都當(dāng)做package對待,甚至包括python和conda自身!因此,conda打破了包管理與環(huán)境管理的約束,能非常方便地安裝各種版本python、各種package并方便地切換2018-04-04python?include標(biāo)簽的使用方式及說明
這篇文章主要介紹了python?include標(biāo)簽的使用方式及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03在Python中使用PIL模塊對圖片進(jìn)行高斯模糊處理的教程
這篇文章主要介紹了在Python中使用PIL模塊對圖片進(jìn)行高斯模糊處理的教程,這個無圖形界面的腳本代碼非常簡單,需要的朋友可以參考下2015-05-05Python實戰(zhàn)之實現(xiàn)百度智能圖片識別
這篇文章主要介紹了如何利用Python編寫一個百度智能圖片識別項目,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-01-01