zoukankan      html  css  js  c++  java
  • web-服务器

    import multiprocessing
    import re
    import socket

    from dynamic import mini_frame


    class Wsgi(object):
    """web服务器类"""

    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):
    """用来为客户端发送数据"""
    # 接收浏览器发送过来的请求,http请求
    request = new_socket.recv(1024).decode("utf-8")
    request_lines = request.splitlines() # 请求内容列表
    print(request_lines)

    # GET /index.html HTTP/1.1
    file_name = ""
    ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
    if ret:
    file_name = ret.group(1)
    if file_name == "/":
    file_name = "/index.html"

    # 返回http格式数据给浏览器
    if not file_name.endswith(".html"):
    try:
    f = open("./static" + file_name, "rb")
    except:
    response = "HTTP/1.1 404 NOT FOUND "
    response += " "
    response += "----FILE NOT FOUND------"
    new_socket.send(request.encode("utf-8"))
    else:
    html_content = f.read()
    f.close()
    response = "HTTP/1.1 200 OK "
    response += " "
    # reponse += html_content
    new_socket.send(response.encode("utf-8"))
    new_socket.send(html_content)

    else:
    env = dict()
    env["PATH_INFO"] = file_name
    body = mini_frame.application(env, self.set_response_header)

    header = "HTTP/1.1 %s" % self.status
    for temp in self.headers:
    header += "%s:%s " % (temp[0], temp[1])

    header += " "

    response = header + body

    new_socket.send(response.encode("utf-8"))

    new_socket.close()

    def set_response_header(self, status, headers):
    self.status = status
    self.headers = headers

    def run_forver(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():
                """控制整体,创建一个web服务器对象,然后调用这个对象run-forver方法运行"""
        wsgi_server = Wsgi()
        wsgi_server.run_forver()


    if __name__ == "__main__":
    main()

  • 相关阅读:
    ES5 05 Function扩展
    ES5 04 Array扩展
    ES5 03 Object扩展
    ES5 02 JSON对象
    ES5 01 严格模式
    Oracle 数据库复制
    PB函数大全
    Handle( ) //得到PB窗口型对象的句柄
    PB赋值粘贴 多个DW进行update
    pb 11 数据窗口空白,预览pb崩溃解决方案
  • 原文地址:https://www.cnblogs.com/hm-hx-ldy/p/8583049.html
Copyright © 2011-2022 走看看