Python多任务版静态Web服务器实现示例

 更新时间:2022年06月17日 15:49:27   作者:落雨  
这篇文章主要为大家介绍了Python静态Web服务器多任务版实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

概述

使用多线程,让web服务器可以同时处理多个用户的访问。当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞。把创建的子线程设置成为守护主线程,防止主线程无法退出。

实现步骤

1.导入threading模块

import threading

2.设置端口号复用, 程序退出端口立即释放

tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

3.当客户端和服务器建立连接程,创建子线程

设置target的名称,并且通过元组的方式传入new_socket参数

 sub_thread = threading.Thread(target=handle_client_request, args=(new_socket,))

4.设置守护主进程

sub_thread.setDaemon(True)

5.启动子线程

sub_thread.start()

代码实现

import socket
import threading
# 处理客户端的请求
def handle_client_request(new_socket):
    # 代码执行到此,说明连接建立成功
    recv_client_data = new_socket.recv(4096)
    if len(recv_client_data) == 0:
        print("关闭浏览器了")
        new_socket.close()
        return
    # 对二进制数据进行解码
    recv_client_content = recv_client_data.decode("utf-8")
    print(recv_client_content)
    # 根据指定字符串进行分割, 最大分割次数指定2
    request_list = recv_client_content.split(" ", maxsplit=2)
    # 获取请求资源路径
    request_path = request_list[1]
    print(request_path)
    # 判断请求的是否是根目录,如果条件成立,指定首页数据返回
    if request_path == "/":
        request_path = "/index.html"
    try:
        # 动态打开指定文件
        with open("static" + request_path, "rb") as file:
            # 读取文件数据
            file_data = file.read()
    except Exception as e:
        # 请求资源不存在,返回404数据
        # 响应行
        response_line = "HTTP/1.1 404 Not Found\r\n"
        # 响应头
        response_header = "Server: PWS1.0\r\n"
        with open("static/error.html", "rb") as file:
            file_data = file.read()
        # 响应体
        response_body = file_data
        # 拼接响应报文
        response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body
        # 发送数据
        new_socket.send(response_data)
    else:
        # 响应行
        response_line = "HTTP/1.1 200 OK\r\n"
        # 响应头
        response_header = "Server: PWS1.0\r\n"
        # 响应体
        response_body = file_data
        # 拼接响应报文
        response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body
        # 发送数据
        new_socket.send(response_data)
    finally:
        # 关闭服务与客户端的套接字
        new_socket.close()
# 程序入口函数
def main():
    # 创建tcp服务端套接字
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 设置端口号复用, 程序退出端口立即释放
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
    # 绑定端口号
    tcp_server_socket.bind(("", 9000))
    # 设置监听
    tcp_server_socket.listen(128)
    while True:
        # 等待接受客户端的连接请求
        new_socket, ip_port = tcp_server_socket.accept()
        print(ip_port)
        # 当客户端和服务器建立连接程,创建子线程
        sub_thread = threading.Thread(target=handle_client_request, args=(new_socket,))
        # 设置守护主线程
        sub_thread.setDaemon(True)
        # 启动子线程执行对应的任务
        sub_thread.start()
if __name__ == '__main__':
    main()

以上就是Python静态Web服务器多任务版实现示例的详细内容,更多关于Python静态Web服务器多任务的资料请关注脚本之家其它相关文章!

相关文章

  • Python 3.7新功能之dataclass装饰器详解

    Python 3.7新功能之dataclass装饰器详解

    这篇文章主要给大家介绍了关于Python 3.7新功能之dataclass装饰器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • Python实现绘制水平线

    Python实现绘制水平线

    这篇文章主要为大家详细介绍如何了在Python中创建一条水平线以及Python 中的 Matplotlib 库的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2023-10-10
  • Python数据分析Numpy中常用相关性函数

    Python数据分析Numpy中常用相关性函数

    这篇文章主要为大家介绍了Python数据分析Numpy中常用相关性函数讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python 发送SMTP邮件的简单教程

    Python 发送SMTP邮件的简单教程

    SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,Python内置对SMTP的支持,可以发送纯文本文件,HTML邮件以及附带文件。本文讲解如何使用python发送邮件
    2021-06-06
  • 使用python分析git log日志示例

    使用python分析git log日志示例

    这篇文章主要介绍了使用python分析git log日志示例,需要的朋友可以参考下
    2014-02-02
  • Python实现统计给定列表中指定数字出现次数的方法

    Python实现统计给定列表中指定数字出现次数的方法

    这篇文章主要介绍了Python实现统计给定列表中指定数字出现次数的方法,涉及Python针对列表的简单遍历、计算相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • Appium自动化测试实现H5页面元素定位

    Appium自动化测试实现H5页面元素定位

    本文主要介绍了Appium自动化测试实现H5页面元素定位,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • python写入xml文件的方法

    python写入xml文件的方法

    这篇文章主要介绍了python写入xml文件的方法,涉及Python操作XML模块实现针对XML文件操作的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 基于python修改srt字幕的时间轴

    基于python修改srt字幕的时间轴

    这篇文章主要介绍了基于python修改srt字幕的时间轴,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 解决TypeError: Object of type xxx is not JSON serializable错误问题

    解决TypeError: Object of type xxx is&

    这篇文章主要介绍了解决TypeError: Object of type xxx is not JSON serializable错误问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论