本想写一篇关于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+"\r\n")

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 "\r\n"

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 + "\r\n"

response += "\r\n"

response += reply

print response

assces_log(request)

conn.sendall(response)

conn.close()

s.close()

python实现web服务器_python实现web服务器相关推荐

  1. python如何收集数据库_python 整理web数据库

    从GitHub中整理出来的15个最受欢迎的Python开源框架,你喜欢哪个 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信, ...

  2. python网站模板下载_Python 的 Web 应用程序模板 - Visual Studio | Microsoft Docs

    Python Web 应用程序项目模板Python web application project templates 01/28/2019 本文内容 Visual Studio 中的 Python ...

  3. python怎么重启内核_python怎么重启服务器

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  4. asp.net web开发框架_Python之Web开发框架学习 发送电子邮件

    Django带有易于使用的轻型引擎来发送电子邮件.与Python类似,您只需要导入smtplib.在Django中,您只需要导入django.core.mail.要开始发送电子邮件,请编辑您的项目se ...

  5. python 简单web音频_Python Twisted web服务器音频fi

    我尝试用python中的twisted创建一个简单的web服务器.不过,我无法提供m4a音频文件.在 在当前程序中,当我加载http://localhost:8880/mp3.html时,它可以正常工 ...

  6. python 搭建的http 动态服务器_Python 创建HTTP服务器的简单示例

    这篇文章主要为大家详细介绍了Python 创建HTTP服务器的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! ...

  7. python django前端框架_Python的Web应用框架–Django

    一:简介 python的web框架有很多,个人查了一下,有Django.Pylons. Tornado.Bottle和Flask等,其中使用人数最多的是Django,而我学习Django也是因为ope ...

  8. python编写web接口_Python写web接口

    前言 最近在看有关python的一些知识.是关于深度学习的东西,但是很不明白,因为自己的数学功底太差.之前总是想搞一些关于算法的东西,又不会,这就想起来了大二实训老师的话.这个老师挺好,和我聊了两堂课 ...

  9. python django flask介绍_Python开发WEB框架Flask详细介绍

    Flask简介 Flask是一个相对于Django而言轻量级的Web框架. 和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模 ...

最新文章

  1. 【数据结构与算法】之深入解析“两数相除”的求解思路与算法示例
  2. 多线程学习(二)----AfxBeginThread
  3. MYSQL存储引擎笔记
  4. 重用生成的JAXB类
  5. 缓存中间件-Memcache命令介绍
  6. ES6、TYPESCRIPT、ATSCRIPT和BABEL是什么玩意儿
  7. 恶意软件借手机游戏强行吸取流量,使用代码签名证书验明证身
  8. appium操作多台手机_Appium常见问题解答
  9. 基于MATLAB的数字滤波器之低通滤波器
  10. 你该知道的杂志分区和影响因子及最新表格下载
  11. Tab Layout教程
  12. 最新谷歌GOOGLE搜索命令大全
  13. Android中常用的一些颜色色值color整理
  14. PHP做一个直角三角形,三角形角度(直角三角形懒人计算器)
  15. 网络打印机拒绝访问,无法连接处理方法汇总
  16. Mac 双系统分区合并
  17. 学编程难吗?多久能入门?
  18. html5合影拍照小游戏,html5实现简单别踩白块小游戏
  19. 常见邮件服务器 接收服务器和发送邮件服务器 地址
  20. 理论力学---广义坐标和广义力

热门文章

  1. 每秒 10 万并发的 BI 系统如何频繁发生 Young GC?
  2. Kotlin 和 Flutter 对于开发者究竟意味着什么?
  3. C 主导、C++与 C# 为辅,揭秘 Windows 10 源代码!
  4. PHP 8 中确认支持 JIT!
  5. 英特尓祭出开挖数据价值的“六脉神剑”!
  6. 我为什么要帮你查 Bug?
  7. 程序员如何“炼”成算法大师? | 附完整代码
  8. 智能音箱扎堆的技术红海,Rokid 如何杀出一条血路?
  9. javaweb实训第四天下午——员工管理系统-JSPServletJDBC综合练习-CRUD
  10. 给2021的Java一些建议,纯干货