摘要:剛好看了一下,就想著用實(shí)現(xiàn)一下服務(wù)器的過程。創(chuàng)建,監(jiān)聽端口可以自設(shè)解析協(xié)議中的獲取你想要的參數(shù)通過獲取的參數(shù)取服務(wù)器上找到相應(yīng)的靜態(tài)資源這里只說靜態(tài)資源,動(dòng)態(tài)的下一篇再說組織協(xié)議的通過端口返回給客服端
本想寫一篇關(guān)于http->nginx->php這個(gè)過程中數(shù)據(jù)是怎么傳輸?shù)奈恼拢肓税胩欤瑢?shí)在沒有心情去寫。剛好看了一下python,就想著用python實(shí)現(xiàn)一下web服務(wù)器的過程。這個(gè)很簡(jiǎn)單,目前只支持靜態(tài)文件的加載,動(dòng)態(tài)語言就要接入fastcgi了(目前還在看fastcgi,下一版本更新吧)。以前沒寫過python也是邊寫邊查,好多東西用的不是特別好,還有,可以在這個(gè)基礎(chǔ)上改動(dòng),可以支持access.log,多server配置。這里就不寫了。
其實(shí)過程很簡(jiǎn)單,nginx大體也是這個(gè)邏輯(但是,nginx內(nèi)部就復(fù)雜多了)。
創(chuàng)建socket,監(jiān)聽80端口(可以自設(shè))
解析http協(xié)議中的request(獲取你想要的參數(shù))
通過獲取的參數(shù)取服務(wù)器上找到相應(yīng)的靜態(tài)資源(這里只說靜態(tài)資源,動(dòng)態(tài)的下一篇再說)
組織http協(xié)議的response
通過80端口返回給客服端
#/usr/bin/python import socket import sys import os from thread import * HOST = "";PORT = 8887 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print "Socket created" try: s.bind((HOST, PORT)) except socket.error , msg: print "Bind failed. Error Code : " + str(msg[0]) + " Message " + msg[1] sys.exit() print "Socket bind complete" s.listen(10) print "Socket now listening" def assces_log(request): fp = open("http.log", "aw") fp.write(request+" ") fp.close() def parse_request(request): request = request.splitlines() line = request[0] line = line.split(); dict_request = {"method":line[0], "path":line[1], "version":line[2]} return dict_request while True: conn, addr = s.accept() request = conn.recv(1024) print request print " " dist_request = parse_request(request) path = dist_request["path"] path = os.getcwd() + path if os.path.isfile(path): if os.path.exists(path): fp = open(path, "r") reply = fp.read() fp.close() response_errno = 200 response_msg = "OK" else: reply = "Not found page" response_errno = 404 response_msg = "Not found" else: reply = "Forbidden" response_errno = 403 response_msg = "Forbidden" response = "HTTP/1.1 " + str(response_errno) + " " + response_msg + " " response += " " response += reply print response assces_log(request) conn.sendall(response) conn.close() s.close()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/37757.html
摘要:的解析器實(shí)現(xiàn)更成熟,第三方庫質(zhì)量高解析器盡管已經(jīng)有了很大的性能提升和很多新的功能,但是從源代碼實(shí)現(xiàn)的角度來說,基本上是通過在源代碼上打來增加功能的。相對(duì)而言,解析器更成熟,也比較穩(wěn)定。 最近在考慮學(xué)習(xí)一門后端語言,在ruby和python直接猶豫,然后自己做了一些對(duì)比,希望能幫到有同樣問題的你。 一、異同對(duì)比選擇1、Python和ruby的相同點(diǎn): 都強(qiáng)調(diào)語法簡(jiǎn)單,都具有更一般的表達(dá)...
摘要:在做數(shù)據(jù)分析和人工智能方面也有很多可以直接使用的算法庫。各方面都能找到優(yōu)秀的組件。但開發(fā)起來復(fù)雜一些,更適合有一定規(guī)模的團(tuán)隊(duì)采用。 對(duì)語言之間優(yōu)勢(shì)這個(gè)問題,可以寫幾本書來具體闡述. 我嘗試簡(jiǎn)單地說一點(diǎn)。不見得對(duì),也不可能完整,僅供參考。 互聯(lián)網(wǎng)興起,靜態(tài)頁面不能滿足復(fù)雜的交互需求. 出現(xiàn)了動(dòng)態(tài)技術(shù).史前時(shí)期動(dòng)態(tài)Web 開發(fā)多采用CGI 技術(shù)來實(shí)現(xiàn). CGI 將腳本作為單獨(dú)的進(jìn)程運(yùn)行, ...
摘要:在做數(shù)據(jù)分析和人工智能方面也有很多可以直接使用的算法庫。各方面都能找到優(yōu)秀的組件。但開發(fā)起來復(fù)雜一些,更適合有一定規(guī)模的團(tuán)隊(duì)采用。 對(duì)語言之間優(yōu)勢(shì)這個(gè)問題,可以寫幾本書來具體闡述. 我嘗試簡(jiǎn)單地說一點(diǎn)。不見得對(duì),也不可能完整,僅供參考。 互聯(lián)網(wǎng)興起,靜態(tài)頁面不能滿足復(fù)雜的交互需求. 出現(xiàn)了動(dòng)態(tài)技術(shù).史前時(shí)期動(dòng)態(tài)Web 開發(fā)多采用CGI 技術(shù)來實(shí)現(xiàn). CGI 將腳本作為單獨(dú)的進(jìn)程運(yùn)行, ...
摘要:軟件開發(fā)者通常依據(jù)特定的框架實(shí)現(xiàn)更為復(fù)雜的商業(yè)運(yùn)用和業(yè)務(wù)邏輯。所有,做開發(fā),要用一個(gè)框架。的性能是相當(dāng)優(yōu)異的,因?yàn)樗鼛熗浇鉀Q一個(gè)被稱之為問題,就是處理大于或等于一萬的并發(fā)。 One does not live by bread alone,but by every word that comes from the mouth of God --(MATTHEW4:4) 不...
摘要:電子表格使用語言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來實(shí)現(xiàn)一個(gè)簡(jiǎn)單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創(chuàng)并首發(fā)于公眾號(hào)【Python貓】,未經(jīng)授權(quán),請(qǐng)勿轉(zhuǎn)載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...
閱讀 995·2023-04-25 19:35
閱讀 2634·2021-11-22 09:34
閱讀 3681·2021-10-09 09:44
閱讀 1713·2021-09-22 15:25
閱讀 2932·2019-08-29 14:00
閱讀 3372·2019-08-29 11:01
閱讀 2596·2019-08-26 13:26
閱讀 1735·2019-08-23 18:08