手寫網站服務器~用Python手動實現一個簡單的服務器,不借助任何框架在瀏覽器中輸出任意內容


前言

在公司網站開發中,我們往往借助於Flask、Django等網站開發框架去提高網站開發效率。那么在面試后端開發工程師的時候,面試官可能就會問到網站開發的底層原理是什么?

我們不止僅僅會使用框架開發,還需要知其所以然

今天領大家不借助任何框架的基礎上手動搭建一個資料查找網站

主要內容

  • TCP網絡模型
  • 正則表達式匹配資源
  • 如何編寫一個tcp server服務端

開始我們的代碼,先是導入模塊

如何實現一個靜態的服務器呢? 可以使用Python自帶的一個通訊模型:socket

python中內置的網絡模型庫tcp / udp

import socket

 

為瀏覽器發送數據的函數

1. 當瀏覽器鏈接到網站服務器的時候

def service_client(new_socket):
    request = new_socket.recv(1024)
    print(request)

 

2. 向瀏覽器發送http數據

如果瀏覽器在接收完http協議數據之后遇到了換行,自動將下面的數據轉成網站內容body中去

response = 'HTTP/1.1 200 OK \r\n'
response += '\r\n'
# 構建你想要顯示的數據內容
response += 'hello world'

 

3. 瀏覽器接受到的數據是由編碼集的,所以我們需要對字符串進行一次編碼

 new_socket.send(response.encode('utf-8'))

 

4. 當服務完瀏覽器之后,需要釋放系統資源

new_socket.close()

 

創建一個執行函數

1. 創建一個tcp套接字

socket模塊需要兩個參數 網絡協議(pc ipv4 ipv6) 模型類型

def main():
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

 

我們操作系統內部有65535個服務端口,當一個程序運行的時候[進程] 占用一個端口
瀏覽器軟件運行占用的端口:80
文件上傳端口:22
網站指定端口:443

端口是有限的,當程序完成任務之后一定要釋放端口 刷新資源

2. 當網站服務中斷時 需要立即釋放端口

tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

 

3.綁定本機信息

tcp_server_socket.bind(('', 80))

 

通過瀏覽器去訪問網站資源 [數據 html css JavaScript 靜態文件(圖片 音頻)]
需要讓瀏覽器首先能找到這台電腦 ip 才可以訪問這台電腦的數據資源
需要綁定電腦的ip地址

4.將網站服務設置成監聽模式

等待瀏覽器鏈接

tcp_server_socket.listen(128)

 

網站服務

    while True:
        '''
        new_socket 負責向瀏覽器發送數據的
        client_addr 記錄當前鏈接電腦的信息(ip port) 
        '''
        new_socket, client_addr = tcp_server_socket.accept()
        service_client(new_socket)
        # 使用new_socket向瀏覽器發送數據

 

啟動程序

if __name__ == "__main__":
    main()

 

運行代碼

出現亂碼,可以把utf-8改為GBK


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM