成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

手寫網(wǎng)站服務(wù)器~用Python手動實(shí)現(xiàn)一個簡單的服務(wù)器,不借助任何框架在瀏覽器中輸出任意內(nèi)容

2450184176 / 2777人閱讀

摘要:前言在公司網(wǎng)站開發(fā)中,我們往往借助于等網(wǎng)站開發(fā)框架去提高網(wǎng)站開發(fā)效率。

前言

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

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

今天領(lǐng)大家不借助任何框架的基礎(chǔ)上手動搭建一個資料查找網(wǎng)站

主頁左側(cè)可以免費(fèi)領(lǐng)取【代碼】【相關(guān)教程、資料】,或者對于本篇文章有疑問的同學(xué)可以私信我

主要內(nèi)容

  • TCP網(wǎng)絡(luò)模型
  • 正則表達(dá)式匹配資源
  • 如何編寫一個tcp server服務(wù)端

開始我們的代碼,先是導(dǎo)入模塊

如何實(shí)現(xiàn)一個靜態(tài)的服務(wù)器呢? 可以使用Python自帶的一個通訊模型:socket

python中內(nèi)置的網(wǎng)絡(luò)模型庫tcp / udp

import socket

為瀏覽器發(fā)送數(shù)據(jù)的函數(shù)

1. 當(dāng)瀏覽器鏈接到網(wǎng)站服務(wù)器的時候

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

2. 向瀏覽器發(fā)送http數(shù)據(jù)

如果瀏覽器在接收完http協(xié)議數(shù)據(jù)之后遇到了換行,自動將下面的數(shù)據(jù)轉(zhuǎn)成網(wǎng)站內(nèi)容body中去

response = "HTTP/1.1 200 OK /r/n"response += "/r/n"# 構(gòu)建你想要顯示的數(shù)據(jù)內(nèi)容response += "hello world"

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

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

4. 當(dāng)服務(wù)完瀏覽器之后,需要釋放系統(tǒng)資源

new_socket.close()

創(chuàng)建一個執(zhí)行函數(shù)

1. 創(chuàng)建一個tcp套接字

socket模塊需要兩個參數(shù) 網(wǎng)絡(luò)協(xié)議(pc ipv4 ipv6) 模型類型

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

我們操作系統(tǒng)內(nèi)部有65535個服務(wù)端口,當(dāng)一個程序運(yùn)行的時候[進(jìn)程] 占用一個端口
瀏覽器軟件運(yùn)行占用的端口:80
文件上傳端口:22
網(wǎng)站指定端口:443

端口是有限的,當(dāng)程序完成任務(wù)之后一定要釋放端口 刷新資源

2. 當(dāng)網(wǎng)站服務(wù)中斷時 需要立即釋放端口

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

3.綁定本機(jī)信息

tcp_server_socket.bind(("", 80))

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

4.將網(wǎng)站服務(wù)設(shè)置成監(jiān)聽模式

等待瀏覽器鏈接

tcp_server_socket.listen(128)

網(wǎng)站服務(wù)

    while True:        """        new_socket 負(fù)責(zé)向瀏覽器發(fā)送數(shù)據(jù)的        client_addr 記錄當(dāng)前鏈接電腦的信息(ip port)         """        new_socket, client_addr = tcp_server_socket.accept()        service_client(new_socket)        # 使用new_socket向瀏覽器發(fā)送數(shù)據(jù)

啟動程序

if __name__ == "__main__":    main()

運(yùn)行代碼

出現(xiàn)亂碼,可以把utf-8改為GBK

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/123625.html

相關(guān)文章

  • 從能做什么到如何去做,一文帶你快速掌握Python編程基礎(chǔ)與實(shí)戰(zhàn)

    摘要:本文的分享主要圍繞以下幾個方面能做什么常見應(yīng)用場景介紹如何學(xué)習(xí)語法基礎(chǔ)實(shí)戰(zhàn)面向?qū)ο缶幊虒?shí)戰(zhàn)練熟基礎(chǔ)小游戲項目的實(shí)現(xiàn)與實(shí)戰(zhàn)一能做什么一種編程語言往往可以應(yīng)用于多方面,有些方面比較常用,有些方面極為常用。比如表示是一個空列表。 摘要:Python語言的教程雖然隨處可見,但是忙于日常業(yè)務(wù)/學(xué)習(xí)的你或許:一直想要找個時間學(xué)一點(diǎn),但是又不知道該從何下手?本文將從Python能做什么,如何學(xué)習(xí)Py...

    BLUE 評論0 收藏0
  • nodeJS實(shí)現(xiàn)基于Promise爬蟲 定時發(fā)送信息到指定郵件

    摘要:也就是說,我的篇文章的請求對應(yīng)個實(shí)例,這些實(shí)例都請求完畢后,執(zhí)行以下邏輯他的目的在于對每一個返回值這個返回值為單篇文章的內(nèi)容,進(jìn)行方法處理。 英國人Robert Pitt曾在Github上公布了他的爬蟲腳本,導(dǎo)致任何人都可以容易地取得Google Plus的大量公開用戶的ID信息。至今大概有2億2千5百萬用戶ID遭曝光。 亮點(diǎn)在于,這是個nodejs腳本,非常短,包括注釋只有71行。 ...

    xuweijian 評論0 收藏0
  • python爬蟲抓取純靜態(tài)網(wǎng)站及其資源

    摘要:下面跟大家詳細(xì)分享一下寫爬蟲抓取靜態(tài)網(wǎng)站的全過程。而我們上面說的元字符都代表一定的規(guī)則和占據(jù)一定的字符。 遇到的需求 前段時間需要快速做個靜態(tài)展示頁面,要求是響應(yīng)式和較美觀。由于時間較短,自己動手寫的話也有點(diǎn)麻煩,所以就打算上網(wǎng)找現(xiàn)成的。 中途找到了幾個頁面發(fā)現(xiàn)不錯,然后就開始思考怎么把頁面給下載下來。 由于之前還沒有了解過爬蟲,自然也就沒有想到可以用爬蟲來抓取網(wǎng)頁內(nèi)容。所以我采取的辦...

    daydream 評論0 收藏0
  • 「真?全棧之路」Web前端開發(fā)后端指南

    前言 在若干次前的一場面試,面試官看我做過python爬蟲/后端 的工作,順帶問了我些后端相關(guān)的問題:你覺得什么是后端? 送命題。當(dāng)時腦瓦特了,答曰:邏輯處理和數(shù)據(jù)增刪改查。。。 showImg(https://user-gold-cdn.xitu.io/2019/4/24/16a4ed4fc8c18078); 當(dāng)場被懟得體無完膚,羞愧難當(dāng)。事后再反思這問題,結(jié)合資料總結(jié)了一下。發(fā)現(xiàn)自己學(xué)過的Re...

    chuyao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<