首页 > Web开发 > 详细

简单的面向对象-web服务器

时间:2019-08-18 01:09:08      阅读:144      评论:0      收藏:0      [点我收藏+]
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服务器

原文:https://www.cnblogs.com/dhzg/p/11370945.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!