web伺服器 簡單web伺服器實現

2021-09-24 01:19:12 字數 2470 閱讀 7617

三次握手:一般情況下是瀏覽器先傳送請求資料,c-s

ack 應答

三次握手成功後,才開始進行通訊資料的收發。

四次揮手:一般情況下是客戶端先關閉,給瀏覽器傳送關閉資訊。

如果瀏覽器傳送了關閉資訊,但是伺服器沒有回過去,(較慢),那麼瀏覽器一直發是不是就會有問題?

所以會等待 2msl的時間。一般為2-5分鐘。msl 是乙個資料報在網路傳輸中最大的存活時間。

三次握手:保證雙方準備資源充足

四次揮手:把資源釋放掉

我們之前寫的程式只能給瀏覽器傳送 hahaha,無論你的訪問位址字尾是什麼。那麼實際當我們使用瀏覽器時,是不同的頁面,這就是前端。.html檔案。這裡我們學習一下,如何使用(不學如何寫html檔案)。

index.html 主頁

register.html 註冊頁面

…應該是相應的html檔案當做body 傳送給瀏覽器。

案例:根據使用者的需求返回相應的頁面:

準備好各種.html 檔案。放在.py檔案的相同路徑下。

import socket

import re

def service_client(new_client_sock):

'''為這個客戶服務'''

# 1.接受瀏覽器傳送過來的請求,即http請求,並且從請求中找到所需要的.html檔案

# 轉為列表

requst_lines = requst.splitlines()

# 尋找檔名 get /index.html http/1.1

# 開頭有:get post put del 不一定是get 所以應該不能用get匹配。

ret = re.match(r'[^/]+(/[^ ]*)',requst_lines[0])

if ret:

file_name = ret.group(1)

if file_name == '/ ':

file_name = '/index.html'

# 2.3 準備body,且這裡準備的body不能和之前的字串一樣,直接相加,而是要單獨傳送。

# 找到相對應的.html檔案

# 2.返回資料給瀏覽器,http 格式

# 2.4 傳送資料給瀏覽器

new_client_sock.send((response.encode('utf-8'))) #header

new_client_sock.send(html_content) # 之前二進位制讀取,所以不需要解碼. body

# 3.關閉套接字

new_client_sock.close()

def main():

'''用來完成整體的控制'''

# 1.建立套接字

tcp_socket = socket.socket(socket.af_inet, socket.sock_stream)

# 2.繫結

tcp_socket.bind(('', 7890))

# 3.變為監聽套接字

tcp_socket.listen(128)

while true:

# 4.等待客戶端的鏈結

new_client_sock, client_addr = tcp_socket.accept()

# 5.為這個客戶端服務

service_client(new_client_sock)

# 4.關閉監聽套接字

tcp_socket.close()

if __name__ == '__main__':

main()

因為沒有.html 檔案,所以此程式沒有執行,後續再補。

簡單實現web伺服器

import multiprocessing import socket import re class webservice object def init self 建立套接字 self.socket server socket.socket socket.af inet,socket.sock...

web伺服器簡單搭建

lamp linux apache mysql php lnmp linux nginx mysql php 此處為lamp 安裝架構元件 安裝步驟 1 安裝apache 2 mysql或mariadb安裝 yum install mariadb y 3 php安裝 yum install php ...

web伺服器 併發web伺服器實現 epoll

在linux的網路程式設計中,很長的時間都在使用select來做事件觸發。在linux新的核心中,有了一種替換它的機制,就是epoll。epoll 是當今 linux 系統採用的方式,一般伺服器都是用 epoll 來實現的。epoll 是一種方案,這種方案不使用多程序多執行緒多協程,而是使用單程序單...