摘要:剛好看了一下,就想著用實現一下服務器的過程。創建,監聽端口可以自設解析協議中的獲取你想要的參數通過獲取的參數取服務器上找到相應的靜態資源這里只說靜態資源,動態的下一篇再說組織協議的通過端口返回給客服端
本想寫一篇關于http->nginx->php這個過程中數據是怎么傳輸的文章,想了半天,實在沒有心情去寫。剛好看了一下python,就想著用python實現一下web服務器的過程。這個很簡單,目前只支持靜態文件的加載,動態語言就要接入fastcgi了(目前還在看fastcgi,下一版本更新吧)。以前沒寫過python也是邊寫邊查,好多東西用的不是特別好,還有,可以在這個基礎上改動,可以支持access.log,多server配置。這里就不寫了。
其實過程很簡單,nginx大體也是這個邏輯(但是,nginx內部就復雜多了)。
創建socket,監聽80端口(可以自設)
解析http協議中的request(獲取你想要的參數)
通過獲取的參數取服務器上找到相應的靜態資源(這里只說靜態資源,動態的下一篇再說)
組織http協議的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()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39226.html
摘要:的解析器實現更成熟,第三方庫質量高解析器盡管已經有了很大的性能提升和很多新的功能,但是從源代碼實現的角度來說,基本上是通過在源代碼上打來增加功能的。相對而言,解析器更成熟,也比較穩定。 最近在考慮學習一門后端語言,在ruby和python直接猶豫,然后自己做了一些對比,希望能幫到有同樣問題的你。 一、異同對比選擇1、Python和ruby的相同點: 都強調語法簡單,都具有更一般的表達...
摘要:在做數據分析和人工智能方面也有很多可以直接使用的算法庫。各方面都能找到優秀的組件。但開發起來復雜一些,更適合有一定規模的團隊采用。 對語言之間優勢這個問題,可以寫幾本書來具體闡述. 我嘗試簡單地說一點。不見得對,也不可能完整,僅供參考。 互聯網興起,靜態頁面不能滿足復雜的交互需求. 出現了動態技術.史前時期動態Web 開發多采用CGI 技術來實現. CGI 將腳本作為單獨的進程運行, ...
摘要:在做數據分析和人工智能方面也有很多可以直接使用的算法庫。各方面都能找到優秀的組件。但開發起來復雜一些,更適合有一定規模的團隊采用。 對語言之間優勢這個問題,可以寫幾本書來具體闡述. 我嘗試簡單地說一點。不見得對,也不可能完整,僅供參考。 互聯網興起,靜態頁面不能滿足復雜的交互需求. 出現了動態技術.史前時期動態Web 開發多采用CGI 技術來實現. CGI 將腳本作為單獨的進程運行, ...
摘要:軟件開發者通常依據特定的框架實現更為復雜的商業運用和業務邏輯。所有,做開發,要用一個框架。的性能是相當優異的,因為它師徒解決一個被稱之為問題,就是處理大于或等于一萬的并發。 One does not live by bread alone,but by every word that comes from the mouth of God --(MATTHEW4:4) 不...
摘要:電子表格使用語言電子表格是辦公軟件的必備,我們最熟知的是微軟的。文中用框架來實現一個簡單的電子表格,所用代碼僅行。 showImg(https://segmentfault.com/img/remote/1460000019770011); 本文原創并首發于公眾號【Python貓】,未經授權,請勿轉載。 原文地址:https://mp.weixin.qq.com/s/Ob... 今天,...
閱讀 2947·2021-09-23 11:32
閱讀 2918·2021-09-22 15:12
閱讀 1708·2019-08-30 14:07
閱讀 3448·2019-08-29 16:59
閱讀 1640·2019-08-29 11:11
閱讀 2307·2019-08-26 13:50
閱讀 2426·2019-08-26 13:49
閱讀 2621·2019-08-26 11:49