【Python高级353】python实现多线程版本的TCP服务器

前面学了了套接字编程、tcp服务端客户端开发、面向对象版的服务端客户端、带有端口复用的服务端。

这里使用多线程开发多任务版的服务端


多任务版本的TCP服务器

来一个客户,就为其创建一个线程

python 复制代码
import socket
import threading

class WebServer:
    # 3、定义一个__init__方法,初始化套接字对象
    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, True)  # 参数2:SOL_SOCKET表示当前套接字,参数3:SO_REUSEADDR表示端口复用,参数4:True表示开启端口复用(默认是false,要等待很长时间端口才会自动释放)
    
        self.tcp_server_socket.bind(("127.0.0.1", 8000))  # 如果是本机,可以不写ip地址
        self.tcp_server_socket.listen(128)  # 128表示最大连接数

    # 4、定义一个start方法,启动服务器,接收客户端连接
    def start(self):
        while True:
            # 等待接受客户端的连接请求
            new_socket, ip_port = self.tcp_server_socket.accept()

            # 当接收到客户端连接请求后创建一个线程(线程内调用自身的handle_request()方法,用于接收和发送消息(封装性))
            sub_thread = threading.Thread(target=self.handle_request, args=(new_socket, ip_port))
            sub_thread.start()

    # 5、定义一个handle_request方法,用于接收和发送消息
    def handle_request(self, new_socket, ip_port):
        # 接收某个客户端发送过来的消息
        recv_data = new_socket.recv(1024).decode("utf-8")  # 实际工作中一条数据大小在1~1.5k之间
        print(f"接收到的数据为:{recv_data}")

        # 发送消息给客户端
        new_socket.send("信息已收到".encode("utf-8"))

        # 关闭套接字
        new_socket.close()

# 定义一个程序的执行入口
if __name__ == "__main__":
    # 1、实例化服务器对象
    server = WebServer()

    # 2、启动服务器
    server.start()
相关推荐
Java后端的Ai之路5 分钟前
Git冲突完整排查与实战:本地修改覆盖报错到成功推送全流程复盘
开发语言·人工智能·git·python·pop
javartisan19 分钟前
AI Agent 中 Tool / Skill 的调用链路设计
python
钱栈up25 分钟前
大屏Logo定位调了8次才合格:响应式定位的经验总结安装Unsloth桌面端报PyTorch失败:Python 3.13的ABI不兼容所致
python
Dovis(誓平步青云)29 分钟前
QQ 机器人怎么接上 AI?用 AstrBot + NapCat 搭一套可扩展的 DeepSeek 助手
服务器·人工智能·机器人·操作系统·电脑·智能化
wuhuhuan30 分钟前
Case Generator 测试自动化平台
python·测试工具·自动化
Flynt2 小时前
Astra 自主跑了 35 小时烧掉 40 亿 token,产出为零:我给 Agent 加了三道闸
python·aigc·agent
mldong2 小时前
Python 开发者也有自己的轻量工作流引擎了:pip install 一行,5 分钟跑通一条审批流
后端·python·架构
JJJennie7772 小时前
MAI Gateway技术揭秘:大模型网关能做什么?从原理到落地
linux·服务器·网络·ai网关
weixin199701080163 小时前
《跨境二手ERP的3种对接模式:自研API / SaaS中间件 / 平台认证服务商,怎么选?》(附Python源码)
开发语言·python·中间件
B2_Proxy3 小时前
Python 爬虫代理中间件开发:统一处理 403、429 与自动重试机制
python