第二十三节 让web服务器支持WSGI协议

import socket
import multiprocessing
import re
import dynamic.mini_frame

class WSGIServer():

    def __init__(self):
        self.web_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.web_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.web_socket.bind((‘192.168.0.106‘,7890))
        self.web_socket.listen(128)    

    def tcp_serve(self, resp_socket):
        recv_data = resp_socket.recv(1024).decode(‘utf-8‘)
        request_lines = recv_data.splitlines()
        file_name = ‘‘
        ret = re.match(r"[^/]+(/[^ ]*)",request_lines[0])
        if ret:
            file_name=ret.group(1)
            print(file_name)
            if file_name == "/":
                file_name = ‘\index.html‘

        path = r‘E:\\360Downloads\\Software\\新建文件夹\\新建文件夹\\tmag_23_Infinity‘+file_name
        if not file_name.endswith(".py"):
            # 判断是都是.py结尾,不是返回动态页面,是返回静态页面
            try:
                f=open(path,‘rb‘)
            except:
                resp_data = ‘HTTP/1.1 200 OK\r\n‘ + "\r\n" + ‘.....file not find....‘
                resp_socket.send(resp_data.encode(‘utf-8‘))
            else:
                html_content = f.read()
                f.close()
                resp_data = ‘HTTP/1.1 200 OK\r\n‘ + "\r\n"
                resp_socket.send(resp_data.encode(‘utf-8‘))
                resp_socket.send(html_content)
        else:
            # 动态页面处理
            env= dict()
            env[‘PATH INFO‘] = file_name
            # 调用mini_frame框架里的application函数,返回header和body,在将两者在web服务器里组装,返回给浏览器
            body =dynamic.mini_frame.application(env, self.set_response_headers)
            header = ‘HTTP/1.1 %s\r\n‘ % self.status
            for temp in self.headers:
                header += "%s:%s\r\n" % (temp[0], temp[1])
            header += "\r\n"
            resp_data = header +body
            resp_socket.send(resp_data.encode(‘utf-8‘))

        resp_socket.close()

    def set_response_headers(self,status,headers):
        ‘‘‘该方法用于接收mini_frame框架里返回的header数据‘‘‘
        self.status = status
        self.headers = [(‘Server‘,‘mini_web v8.8‘)]
        self.headers += headers

    def run_forver(self):
        while True:
            resp_socket, resp_addr = self.web_socket.accept()
            p = multiprocessing.Process(target=self.tcp_serve, args=(resp_socket,))
            p.start()
            # 同乌班图一样也需要关闭套接字,跟文件描述符有关,不然页面一直刷新不出来
            resp_socket.close()
        # self.web_socket.close()

def main():
    wsgi_server = WSGIServer()
    wsgi_server.run_forver()

if __name__ == ‘__main__‘:
    main()

原文地址:https://www.cnblogs.com/kogmaw/p/12602536.html

时间: 2024-11-05 22:40:25

第二十三节 让web服务器支持WSGI协议的相关文章

第二十四节 让web服务器支持WSGI协议

import socket import multiprocessing import re # import dynamic.mini_frame import sys # 通过sys.argv在cmd命令行给实例对象传参 class WSGIServer(): def __init__(self, port, app, static_path): self.application = app self.static_path = static_path self.web_socket = s

Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)

前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章.本系列文章作为国内最早详细介绍 Nginx + PHP 安装.配置.使用的资料之一,为推动 Nginx 在国内的发展产生了积极的作用.本文可能不断更新小版本,请记住原文链接“http://blog.zyan.cc/nginx_php_v6/”,获取最新内容.第6篇文章主要介绍了Nginx 0.8.x新的平滑重启方式,将PHP升级到了5.2.14,修正了PEAR问题.另将MySQL 5.1.x升级到了

(转)第二十三节 inotify事件监控工具

第二十三节 inotify事件监控工具 标签(空格分隔): Linux实战教学笔记-陈思齐 原文:http://www.cnblogs.com/chensiqiqi/p/6542268.html 第1章,NFS存储服务器与backup备份服务器的搭建. 详细细节知识与搭建请关注: http://www.cnblogs.com/chensiqiqi/p/6514315.html Rsync数据同步工具 http://www.cnblogs.com/chensiqiqi/p/6530859.html

第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies

第三百三十三节,web爬虫讲解2-Scrapy框架爬虫-Scrapy模拟浏览器登录 模拟浏览器登录 start_requests()方法,可以返回一个请求给爬虫的起始网站,这个返回的请求相当于start_urls,start_requests()返回的请求会替代start_urls里的请求 Request()get请求,可以设置,url.cookie.回调函数 FormRequest.from_response()表单post提交,第一个必须参数,上一次响应cookie的response对象,其

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装

第三百二十三节,web爬虫,scrapy模块以及相关依赖模块安装 当前环境python3.5 ,windows10系统 Linux系统安装 在线安装,会自动安装scrapy模块以及相关依赖模块 pip install Scrapy 手动源码安装,比较麻烦要自己手动安装scrapy模块以及依赖模块 安装以下模块 1.lxml-3.8.0.tar.gz (XML处理库) 2.Twisted-17.5.0.tar.bz2 (用Python编写的异步网络框架) 3.Scrapy-1.4.0.tar.gz

centos mysql 优化 第二十三节课

centos mysql  优化  第二十三节课 f

自己实现简单Web服务器,支持GET POST请求

最近项目上遇到一个需求,最后想到的解决方案是自己实现一个web服务器去处理请求,然后再将信息发送到另外一个程序.然后返回处理之后的结果呈现出来. 现在我就来分享一下如何实现的. 通过.NET 为我们提供的HttpListener类实现对Http协议的处理,实现简单的web服务器. 注意:此类在 .NET Framework 2.0 版中是新增的.所以支持.NET Framework 2.0以上版本.该类仅在运行 Windows XP SP2 或 Windows Server 2003 操作系统的

一个简单的Web服务器-支持Servlet请求

上接 一个简单的Web服务器-支持静态资源请求,这个服务器可以处理静态资源的请求,那么如何处理Servlet请求的呢? 判断是否是Servlet请求 首先Web服务器需要判断当前请求是否是Servlet请求. 像Tomcat,通过解析HTTP报文拿到请求url后,就可以根据web.xml来查找是否有匹配的Servlet,如果有匹配则认定为是一个有效的Servlet请求,然后将request,response传给对应的servlet的service()方法. 这里既然要实现一个简单的Web服务器,

Python学习教程:WEB开发——Python WSGI协议详解

Web应用程序开发 Web应用程序的本质是什么 简单描述Web应用程序的本质,就是我们通过浏览器访问互联网上指定的网页文件展示到浏览器上. 流程如下图: 从更深层次一点的技术角度来看,由以下几个步骤: 浏览器,将要请求的内容按照HTTP协议发送服务端 服务端,根据请求内容找到指定的HTML页面 浏览器,解析请求到的HTML内容展示出来 HTTP协议的全称是HyperText Transfer Protocol(超文本传输协议) HTTP协议是我们常用的五层协议中的应用层(5层从上到下是应用层,传