首页 > 编程语言 >如何利用sockserver模块编程实现客户端并发

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

时间:2024-08-19 15:15:12浏览次数:10  
标签:socket 编程 并发 client sockserver cpu 服务端 客户端

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

服务端:

#导入sockserver模块
import socketserver

ip_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:continue
    if msg=='quit':break
    socket_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始终处于工作状态。--效率高

标签:socket,编程,并发,client,sockserver,cpu,服务端,客户端
From: https://www.cnblogs.com/kkbest/p/18366665

相关文章

  • 学懂C++(三十七):深入详解C++网络编程开发
            目录一、网络编程基础概念与原理1.1套接字(Socket)1.2IP地址和端口1.3TCP/IP协议二、C++网络编程核心技术2.1套接字编程2.1.1创建套接字2.1.2绑定地址2.1.3监听和接受连接2.1.4发送和接收数据三、C++网络编程高级技术3.1异步I/O3.2多线......
  • 学懂C++(三十八):深入详解C++网络编程:套接字(Socket)开发技术
    目录一、概述与基础概念1.1套接字(Socket)概念1.2底层原理与网络协议1.2.1网络协议1.2.2套接字工作原理二、C++套接字编程核心技术2.1套接字编程的基本步骤2.2套接字编程详细实现2.2.1创建套接字2.2.2绑定地址2.2.3监听和接受连接(服务端)2.2.4客户端连接2.......
  • 矩阵和神经网络的优雅与力量-《Python神经网络编程》读后感
    《Python神经网络编程》是一本非常优秀的神经网络入门编程书,作者手把手从安装环境开始,每一行代码都是在树莓派上就能运行的,甚至可以说不需要什么第三方库,仅仅用了矩阵的优雅和力量,就能够在树莓派上顺利的运行。仅仅是这样简单的代码实现,就实现了神经网络的前馈信号计算、误差......
  • 编程语言的核心:类型系统(Type System)
    编程语言的核心是其类型系统,只要掌握了其类型系统,对整门编程语言的掌握便事半功倍。为啥这么说呢?首先,在设计一门编程语言的时候,会针对该编程语言所作用的问题域(ProblemDomain)和解决域(SolutionDomain),进行设计。由此,对于问题域和解决域的抽象,就行形成该编程语言的抽......
  • C#开发的应用升级管理器LUAgent客户端 - 开源研究系列文章 - 个人小作品
          以前就想开发应用的升级更新的程序,也想过把升级工具单独弄成类库模块化。后来就想到要开发服务端和客户端独立出来,只要配置好就能够对任何应用进行升级更新操作。笔者将这个命名为:LUAgent,即LzhdimUpdateAgent,升级更新代理,上次发布了服务端工具:https://www.cnb......
  • 云端同步:Scratch编程世界的无限可能
    标题:云端同步:Scratch编程世界的无限可能在当今数字化时代,云技术已成为我们生活的一部分。对于教育和编程爱好者来说,Scratch——一款由麻省理工学院媒体实验室开发的视觉编程语言,提供了一个简单易用的编程环境,让孩子们可以轻松地创建自己的互动故事、游戏和动画。然而,Scratc......
  • C++中的多线程编程和锁机制
    二、多线程、锁2.1C语言线程库pthread(POSIXthreads)2.2.1线程创建pthread_create#include<pthread.h>pthread_tthread;ThreadDataargs={1,"Hellofromparameterizedthread"};intresult=pthread_create(&thread,attr,function,args); //线程创建即......
  • Scratch多人协作:共创编程乐园
    标题:Scratch多人协作:共创编程乐园在Scratch这个充满创意的编程乐园中,多人协作不仅能激发团队的创造力,还能提高项目的完成效率。本文将详细介绍如何在Scratch中实现多人协作,包括共享工作室、使用云变量、以及一些实用的扩展工具和技巧。在Scratch这个充满创意的编程乐园中,......
  • Linux, shell编程备份数据库详解,带你读懂命令行指令
    目录先看最终代码再解释[!-d"${BACKUP}/${DATETIME}"]解析mysqldump-u${DB_USER}-p${DB_PW}--host=${HOST}-q-R--databases${DATABASE}|gzip>${BACKUP}/${DATETIME}/$DATETIME.sql.gz解析 tar-zcvf$DATETIME.tar.gz${DATETIME}解析先看最终代码再解......
  • 以c primer plus(第六版)为大纲的C语言初学手记,含示例代码及编程练习(第四章)
    //第4章//example4.1//#include<stdio.h>//#include<string.h> //toincludestrlrn()//#defineDENSITY62.4 //todefineaconstant//intmain()//{//   floatweight,volume;//   intsize,letters;//   charname[40]; //todeclareadig......