Python网络编程——静态Web服务器多任务版

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

概述

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



实现步骤

1.导入threading模块

importthreading


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()



代码实现

importsocketimportthreading# 处理客户端的请求defhandle_client_request(new_socket):
# 代码执行到此,说明连接建立成功recv_client_data=new_socket.recv(4096)
iflen(recv_client_data) ==0:
print("关闭浏览器了")
new_socket.close()
return# 对二进制数据进行解码recv_client_content=recv_client_data.decode("utf-8")
print(recv_client_content)
# 根据指定字符串进行分割, 最大分割次数指定2request_list=recv_client_content.split(" ", maxsplit=2)
# 获取请求资源路径request_path=request_list[1]
print(request_path)
# 判断请求的是否是根目录,如果条件成立,指定首页数据返回ifrequest_path=="/":
request_path="/index.html"try:
# 动态打开指定文件withopen("static"+request_path, "rb") asfile:
# 读取文件数据file_data=file.read()
exceptExceptionase:
# 请求资源不存在,返回404数据# 响应行response_line="HTTP/1.1 404 Not Found\r\n"# 响应头response_header="Server: PWS1.0\r\n"withopen("static/error.html", "rb") asfile:
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()
# 程序入口函数defmain():
# 创建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)
whileTrue:
# 等待接受客户端的连接请求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()


目录
相关文章
|
2月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
393 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
11天前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
148 0
|
2月前
|
安全 Linux 网络安全
Python极速搭建局域网文件共享服务器:一行命令实现HTTPS安全传输
本文介绍如何利用Python的http.server模块,通过一行命令快速搭建支持HTTPS的安全文件下载服务器,无需第三方工具,3分钟部署,保障局域网文件共享的隐私与安全。
380 0
|
4月前
|
Web App开发 前端开发 JavaScript
鸿蒙5开发宝藏案例分享---Web适配一多开发实践
这是一份实用的鸿蒙Web多设备适配开发指南,针对开发者在不同屏幕尺寸下的布局难题提供了解决方案。文章通过三大法宝(相对单位、媒体查询和窗口监听)详细介绍如何实现智能适配,并提供了多个实战案例,如宫格布局、对话框变形和自适应轮播图等。此外,还分享了调试技巧及工具推荐,帮助开发者快速上手并优化性能。最后鼓励读者实践探索,并提示更多官方资源等待发现。
|
11月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
587 3
|
6月前
|
关系型数据库 MySQL 数据库
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
984 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
|
6月前
|
机器学习/深度学习 开发框架 API
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
10月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
353 67
|
10月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
281 63

热门文章

最新文章

推荐镜像

更多