如何利用sockserver模块编程实现客户端并发

news/2024/9/12 15:18:55/文章来源:https://www.cnblogs.com/kkbest/p/18366665

前面用sock模块写的服务端和客户端,存在一个大问题,就是当运行多个客户端的时候,必须等一个客户端运行结束,另一个客户端才能实现与服务端的交流,这显然不符合现实中的需求。有没有什么办法解决这个问题呢?有人说没有,屁话。当然有,这就需要用到一个sockserver的模块,用定义类继承类的方式来完成编程,上代码:

服务端:

#导入sockserver模块
import socketserverip_porf=('127.0.0.1',8080)#自定义一个Myserver类,并继承基类
class Myserver(socketserver.BaseRequestHandler):#改写基类的handle方法,固定写法,必须有这个。def handle(self):while True:#接收来自客户端的消息data=self.request.recv(1024)#发送消息到客户端self.request.sendall(data.upper())if __name__ == '__main__':s=socketserver.ThreadingTCPServer(ip_porf,Myserver)print('服务端开始运行...')s.serve_forever()

客户端:

from socket import *
ip_port=('127.0.0.1',8080)#实例化一个sock的TCP协议的对象
socket_client=socket(AF_INET,SOCK_STREAM)
socket_client.connect(ip_port)while True:msg=input('---->:')if not msg:continueif msg=='quit':breaksocket_client.sendall(msg.encode('utf-8'))data=socket_client.recv(1024)print('返回的结果是:%s' %data.decode('utf-8'))
socket_client.close()

按照上面的代码写法,就可以实现客户端并发,也就是说可以同时多个客户端访问服务端并与服务端数据交互。


科普下:并行和并发?同步和异步?

并行:多颗cpu同时执行多个任务
并发:一个或多颗cpu通过轮询切换任务的模式执行多项任务
其中,并行是并发的子集

是不是感觉一头雾水,那是因为你不了解计算机中cpu处理任务的逻辑,下面我来给你讲透彻。
假设你的电脑上只有一颗cpu,但是你听音乐的同时又想做PPT,实际上你的电脑的确可以做到这些。表面上看你的电脑似乎同时在做两件事,其实不是的,是cpu轮询切换的结果。
cpu工作同时存在两种机制(两种机制共同作用):
第一是当遇到IO阻塞,先去处理别的任务,如等待客户端输入信息。
第二是每隔很短的时间,cpu就会通过轮询在不同任务间来回切换,你之所以觉察不到,是因为速度太快了。

同步:假设有A和B两个任务在运行,先执行A,当A遇到IO阻塞,B就等着A。等A彻底执行完了才会执行B。--效率低
异步:假设有A和B两个任务在运行,先执行A,当A遇到IO阻塞,先执行B,等回过头来再执行A,保持CPU始终处于工作状态。--效率高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/783817.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Camera MIPI 协议理解

D-PHY 1、传输模式 1.LP(Low-Power) 模式:用于传输控制信号,最高速率 10 MHz HS(High-Speed)模式:用于高速传输数据,速率范围 [80 Mbps, 1Gbps] per Lane 传输的最小单元为 1 个字节,采用小端(低位字节放到内存的低地址端,高位字节放到内存的高地址端)的方式及 LS…

nvm---安装

安装流程:https://blog.csdn.net/qq_22182989/article/details/125387145 第一步:下载安装 nvm

易优CMS网站prenext 获取上一篇、下一篇内容

【基础用法】 名称:prenext 功能:获取当前文档上一篇、下一篇内容。 语法: {eyou:prenext get=pre} 上一篇:{$field.title}{eyou:else /} 上一篇:暂无{/eyou:prenext} {eyou:prenext get=next} 下一篇:{$field.title}{eyou:else /} 下一篇:暂无{/eyou:pre…

易优CMS网站likearticle 功能:通过前3个TAG标签或前3个关键词,检索整站文档标题中含有tag标签或者关键词的相关文档,进行关联

likearticle 相关文档 [基础用法] 名称:likearticle 功能:通过前3个TAG标签或前3个关键词,检索整站文档标题中含有tag标签或者关键词的相关文档,进行关联。在没有tag标签情况下,就以前3个关键词检索文档标题进行关联。这个标签随着数据量的增加可能会比较影响检索性能。 …

vue 数组和对象更新检测

vue如果要更新v-for渲染出来的数据,它是不会操作dom元素的。 而是就地更新需要操作的元素,并且确保它们在每个索引位置正确渲染。为了给vue一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有的元素,你需要为每项 提供一个唯一Key attribute;<div v-for=&quo…

易优CMS插件route.php路由配置

插件route.php路由配置 只针对网站前台进行路由配置,全面支持TP5.0.10本身的路由规则扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理、二次开…

定位遇阻?合宙模组GNSS排障宝典01

使用合宙GNSS定位模组时,总有客户因为各种原因遇到无法定位的情况。本文总结了无法定位最常见的四种情况,希望能帮到有类似定位应用项目的朋友们,更快地排查出问题所在。使用合宙GNSS定位模组时,总有客户因为各种原因遇到无法定位的情况。 本文总结了无法定位最常见的四种情…

python入门教程(非常详细!3w+ 文字)

先序: 学习编程语言要先学个轮廓,刚开始只用学核心的部分,一些细节、不常用的内容先放着,现用现查即可;把常用的东西弄熟练了在慢慢补充。 1、 安装 Python 解释器 为什么需要安装 Python Python 语言本身是由解释器执行的,因此你需要在你的计算机上安装 Python 解释器。这…

cnetos 9 安装巨坑!!! ssh无法登录

不管任何软件登录 或任何形式的ssh登录 仅开启了密钥的登录 没有账号密码具体步骤:找到合适的插入位置:在 /etc/ssh/sshd_config 文件中查找类似以下的段落,然后在附近添加新配置:# Authentication: #PermitRootLogin prohibit-password #PasswordAuthentication no添加或修…

汉明距离(Hamming distance)

在图像信号处理中,汉明距离(Hamming distance)通常用于比较两个图像之间的差异程度。汉明距离原本是衡量两个等长字符串之间对应位置上不同字符的数量,但在图像处理中,它也可以用来比较两个图像的像素值差异。计算步骤 1、图像预处理:确保两个图像的尺寸相同,如果不同,…

遇到403 Forbidden ,服务器端查询后结果是http get查询字符串中包含非法字符

原文链接:https://blog.csdn.net/mm_hello11/article/details/84261672 报错解释: HTTP GET请求通过查询字符串(即URL中"?"后面的部分)传递参数。如果查询字符串包含非法字符,服务器可能会拒绝请求并返回错误,因为这些非法字符可能会破坏URL的格式或者服务器…