import socket
import re
import multiprocessing
import time
import mini_frame class WSGIServer(object):
def __init__(self):
# 创建套接字
self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定
self.tcp_server_socket.bind(('', 7890))
# 监听套接字
self.tcp_server_socket.listen(128) def service_client(self, new_socket):
# 接收浏览器发送过来的请求
request = new_socket.recv(1024).decode('utf8')
request_line = request.splitlines()
print("")
print(">" * 20)
print(request_line) file_name = ""
ret = re.match(r'[^/]+(/[^ ]*)', request_line[0])
if ret:
file_name = ret.group(1)
if file_name == '/':
file_name = '/index.html' # 返回http格式的数据给浏览器
# 如果请求不是以.py结尾的,那就认为是静态资源(html/css/js...)
if not file_name.endswith('.py'):
try:
f = open('./html' + file_name, 'rb')
except:
response = 'HTTP/1.1 404 NOT FOUND\r\n'
response += '\r\n'
response += 'file not found!'
new_socket.send(response.encode('utf8'))
else:
html_content = f.read()
f.close()
response = 'HTTP/1.1 200 OK\r\n'
response += '\r\n'
new_socket.send(response.encode('utf8'))
new_socket.send(html_content)
else:
# 如果是.py结尾的话,那就认为是动态资源
header = 'HTTP/1.1 200 OK\r\n'
header += '\r\n'
body = mini_frame.application(file_name)
response = header + body
# 发送response给浏览器
new_socket.send(response.encode('utf8'))
# 关闭连接
new_socket.close() def run(self):
while True:
# 等待新客户端的连接
new_socket, client_addr = self.tcp_server_socket.accept()
# 为这个客户端服务
p = multiprocessing.Process(target=self.service_client, args=(new_socket,))
p.start()
new_socket.close()
# 关闭套接字
self.tcp_server_socket.close() def main():
wsgi_server = WSGIServer()
wsgi_server.run() if __name__ == '__main__':
main()

mini_frame.py

import time

def login():
return '......login......welcome my website......%s' % time.ctime() def register():
return '......register......welcome my website......%s' % time.ctime() def profile():
return '......profile......welcome my website......%s' % time.ctime() def application(file_name):
if file_name == '/login.py':
return login()
elif file_name == '/register.py':
return register()
else:
return 'Not Found Page!'

笔记:简单的面向对象-web服务器的更多相关文章

  1. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  2. 一个简单的Java web服务器实现

    前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...

  3. Golang学习-第二篇 搭建一个简单的Go Web服务器

    序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...

  4. python简单搭建HTTP Web服务器

    对于Python 2,简单搭建Web服务器,只需在i需要搭建Web服务器的目录(如C:/ 或 /home/klchang/)下,输入如下命令: python -m SimpleHTTPServer 8 ...

  5. Windows窗体应用程序(非Console)使用libuv实现简单的异步WEB服务器

    libuv是一个很强大的异步处理框架(严格意义上不能叫框架,其实就是一组异步函数库,当然框架这东西有各种各样的定义和理解_^...),最初的的目的是用于NODEJS的异步处理,不过因为它是一个独立的项 ...

  6. nodeJS搭建一个简单的(代理)web服务器

    前端获取数据时经常遇见跨域问题,以前一直用nginx做反向代理.最近在用vuejs,发现webpack-dev-server的代理简单好用.于是仿照写了一个简单的web服务器,用于非webpack的项 ...

  7. 《图解HTTP》阅读笔记-第五章-web服务器

      第五章.与HTTP协助的web服务器单台虚拟主机实现多个域名可以用单台物理主机运行多台虚拟主机,这些虚拟主机的IP相同,而虚拟主机有可以寄存多个不同主机名和域名的web网站,所以要保证发送HTTP ...

  8. Tomcat学习笔记【1】--- WEB服务器、JavaEE、Tomcat背景、Tomcat版本

    本文主要讲学习Tomcat需要知道的基础知识. 一 Web服务器 1.1 简介 Web服务器可以解析HTTP协议.当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面 ...

  9. 图解 HTTP 笔记(五)——Web 服务器

    该章的主要内容是讲解与 HTTP 协作的 Web 服务器 一.用单台虚拟主机实现多个域名 基于虚拟主机的功能,可以只使用一台物理机实现多个域名的网站部署. 在互联网上,域名通过 DNS 域名解析系统可 ...

随机推荐

  1. 剑指offer——71扑克牌中的顺子

    题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

  2. 《深入理解Java虚拟机》-(实战)boolean类型在虚拟机中是如何处理的

    这里先引出Java的8大基本类型.直接上图吧. 可以看到,除了boolean和char类型之外,越往下的类型的值域是包含以上的值域的.因此,从上面的基本类型转换成下面的基本类型,无需强制转换.关于它们 ...

  3. Spring事务详细解释

    前言 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为.事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为.这是Spring ...

  4. Organizing Containers of Balls

    题目 David has several containers, each with a number of balls in it. He has just enough containers to ...

  5. android webview 输入法键盘遮挡输入框的问题

    新建一个工具类: /** * 解决webView键盘遮挡问题的类 * Created by zqy on 2016/11/14. */ public class KeyBoardListener { ...

  6. day01 mysql认识 安装 配置 起服务 密码 字符集 用户授权

    day01 mysql      一.认识mysql     关系型数据库:         最流行的关系型数据库管理系统,支持大型数据库,处理上千万条记录         关系型: oracle,  ...

  7. 干货满满!10分钟看懂Docker和K8S

    2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...

  8. 使用node搭建服务时,服务可以启动,但是无法访问

    一开始搭建的是没有问题,能够正常启动和访问,然后吃了个饭回来就变成只能启动,浏览器访问不了了. 说真的,这是一个常识问题.使用node搭建服务访问本地文件,服务搭建的没有问题,能够正常启动.但是在浏览 ...

  9. Java分页查询工具类

    public class PageList<T> { private int totalpage; //总页数 private int totalcount; //总记录数 private ...

  10. HTML5布局篇

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...