python实现miniweb框架

用户通过浏览器发送请求到web服务器,服务器根据请求资源的不同采取不同的返回方式,当浏览器请求的是静态资源,服务器直接返回响应资源,当浏览器请求的是动态资源,服务器需要将请求发送给框架,框架调用模板,将请求数据和模板结合返回给服务器,服务器将模板以响应体的方式发送给浏览器。

浏览器读取响应体,若有图片等静态资源,浏览器继续向服务器发送资源请求,服务器直接返回静态资源,所有资源请求完毕,浏览器将最终页面返回给用户。

实现web服务器

HttpServer.py

import socket
import re
import gevent
import sys
import hframe_flask_stock
from gevent import monkey

monkey.patch_all()


class HttpServer():
    # 1 创建化套接字
    def __init__(self,port=80):
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 2 设置地址重用
        tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        # 3 设置套接字地址,绑定端口
        socket_address = ("", port)
        tcp_server_socket.bind(socket_address)
        # 4 设置监听,最大允许客户端等待连接数为128(套接字由主动变为被动)
        tcp_server_socket.listen(128)
        # 5 将套接字保存为实例属性
        self.tcp_server_socket = tcp_server_socket

    def start(self):
        # 6 等待客户端连接,可以同时接受多个连接
        while True:
            # 7 定义函数,实现服务端信息接受与响应
            new_client_socket,ip_port = self.tcp_server_socket.accept()
            print("新客户端连接")
            g1 = gevent.spawn(self.request_handler,new_client_socket)
            # 因为服务器端不会终止,所以协程一定会执行完成
            # g1.join()

    def request_handler(self,new_client_socket):
        # 8 接受浏览器请求,并判断内容
        recv_data = new_client_socket.recv(1024)
        if not recv_data:
            print("浏览器可能关闭了")
            new_client_socket.close()
            return
        # 解码
        request_text = recv_data.decode()
        print("收到的内容",request_text)
        # 对内容根据\r\n进行切分,目的得到请求行
        request_list = request_text.s
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值