当前位置: 首页 > news >正文

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

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


多任务版本的TCP服务器

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

import socket
import threadingclass 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()

相关文章:

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

前面学了了套接字编程、tcp服务端客户端开发、面向对象版的服务端客户端、带有端口复用的服务端。 这里使用多线程开发多任务版的服务端 多任务版本的TCP服务器 来一个客户,就为其创建一个线程 import socket import threadingclass WebServer:# 3、定义一个__ini…...

分布式调度框架学习笔记

一、分布式调度框架的基本设计 二、线程池线程数量设置的基本逻辑 cpu是分时复用的方法,线程是cpu调度的最小单元 如果当前cpu核数是n,计算密集型线程数一般设为n,io密集型(包括磁盘io和网络io)线程数一般设置为2n. 计算密集型线程数一般设…...

SpringCloudAlibaba技术栈-Nacos

1、什么是Nacos? Nacos是个服务中心,就是你项目每个功能模块都会有个名字,比如支付模块,我们先给这个模块起个名字就叫paymentService,然后将这个名字和这个模块的配置放到Nacos中,其他模块也是这样的。好处是这样能更好地管理项…...

Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)

1、概述 大Key:通常是指值(Value)的长度非常大,实际上键(Key)长度很大也算。通常来说,键本身不会很长,占用的内存较少,因此判断一个键是否为bigKey主要看它对应的值的大…...

谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持

问题现象 在Chrome 高版本上的扩展管理页面(地址栏输入chrome://extensions/或者从界面进入): , 可以查看到扩展的情况。 问题现象大致如图: 问题原因 出现此问题的根本原因在于:谷歌浏览器本身的扩展机制发生了…...

WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue

WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...

数据库的数据被清除了,该如何恢复?

当数据库的数据被清除时,恢复数据的难度和可能性取决于多种因素,包括数据清除的方式、数据库的类型、是否有备份等。以下是一些常见的数据库数据恢复方法: 一、基于备份的恢复 使用备份文件: 如果数据库有定期的备份&#xff0c…...

【西安电子科技大学考研】25官方复试专业课参考书目汇总

初试已经顺利考完啦、成绩已经公布,现在已经有很多同学来问学长学姐,复试参考书有哪些,复试应该做好哪些准备。故此学长学姐给大家整理好了西安电子科技大学各个学院的复试参考书目录,有需要的同学可以参考一下哈。大家可以结合本…...

【理解机器学习中的过拟合与欠拟合】

在机器学习中,模型的表现很大程度上取决于我们如何平衡“过拟合”和“欠拟合”。本文通过理论介绍和代码演示,详细解析过拟合与欠拟合现象,并提出应对策略。主要内容如下: 什么是过拟合和欠拟合? 如何防止过拟合和欠拟…...

fastjson诡异报错

1、环境以及报错描述 1.1 环境 操作系统为中标麒麟、cpu 为国产鲲鹏服务器。 jdk为openjdk version 1.8.0._242 1.2 错误 com.alibaba.fastjson2.JSONException: syntax error : f at com.alibaba.fastjson2.JSONReaderUTF16.readBoolValue(JSONReaderUTF16.java:6424) at c…...

面经zhenyq

如何去实现分层的动画效果? 在Unity中实现分层的动画效果,可以通过Animator的 Layer 功能实现。以下是详细步骤: 1. 什么是分层动画? 分层动画允许在同一个角色的不同部分同时播放独立的动画。例如: 上半身可以播放…...

GoFrame框架介绍

GoFrame是一款功能强大、设计精良且易用的Go语言开发框架,以下为你详细介绍它的相关特点和内容: ### 框架概述 GoFrame是为了提升Go语言开发者的编码效率以及项目的整体可维护性、可扩展性等而打造的开发框架,它涵盖了从基础的网络通信、数据…...

MapReduce工作流程+Shuffle机制

一、Mapreduce工作流程 (1)数据切片Split。数据切片数决定maptask并行度,默认情况下,一个切片大小块大小。切片不是针对整体数据集,而是针对每一个文件单独切片,所以会有小文件问题(CombineTex…...

JAVA8 Stream API 使用详解

Java 8 引入了 Stream API,它提供了对集合对象进行一系列操作的新方式,包括筛选、转换、聚合等。Stream API 的设计目标是提供一种高效且易于使用的处理集合数据的方式,同时支持并行处理。 以下是 Java 8 Stream API 的一些核心概念和使用详解…...

Redis 集群架构:高可用与扩展性

一、引言 在当今数字化时代,数据量呈爆炸式增长,对数据存储和处理的要求也越来越高。Redis作为一款高性能的键值对存储数据库,其集群架构在应对高并发、大数据量场景时展现出了独特的优势,成为众多企业构建高效、稳定系统的关键技…...

Redis数据对象

基本结构图 key和value指向的是redisObject对象 type:标识该对象用的是什么类型(String、List Redis数据结构 SDS SDS有4个属性: len:记录了字符串长度,因此获取字符串长度的时候时间复杂度O(1&#xff…...

Docker部署GitLab服务器

一、GitLab介绍 1.1 GitLab简介 GitLab 是一款基于 Git 的开源代码托管平台,集成了版本控制、代码审查、问题跟踪、持续集成与持续交付(CI/CD)等多种功能,旨在为团队提供一站式的项目管理解决方案。借助 GitLab,开发…...

python版本的Selenium的下载及chrome环境搭建和简单使用

针对Python版本的Selenium下载及Chrome环境搭建和使用,以下将详细阐述具体步骤: 一、Python版本的Selenium下载 安装Python环境: 确保系统上已经安装了Python 3.8及以上版本。可以从[Python官方网站]下载并安装最新版本的Python,…...

重温设计模式--4、组合模式

文章目录 1 、组合模式(Composite Pattern)概述2. 组合模式的结构3. C 代码示例4. C示例代码25 .应用场景 1 、组合模式(Composite Pattern)概述 定义:组合模式是一种结构型设计模式,它允许你将对象组合成…...

5、mysql的读写分离

主从复制 主从复制的含义 主从复制:在一个mysql的集群当中,至少3台,即主1台,从2台。 当有数据写入时,主负责写入本库,然后把数据同步到从服务器。 一定是在主服务器写入数据,从服务器的写入…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

什么是EULA和DPA

文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...