socketserver通讯模块实现并发操作,基于select、epoll、socket、多线程,实现的正真多线程多并发

socketserver通讯模块底层调用的socket模块,只是它作了处理基于lo多路复用加多线程,能实现并发操作,1

SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求。

通讯模块实现并发操作服务端,2

1,import socketserver #导入模块,3

2,必须创建一个类来,继承两个类socketserver和BaseRequestHandler,注意必须创建一个类来继承这两个模块内部指定的类4

  socketserver,创建类模块指定继承类名称5

  BaseRequestHandler,创建类模块指定继承类名称6

  注意:这个类对象里自动封装了3个普通字段分别为,self.request(客户端连接对象),self.client_address(客户端IP和端口),self.server(服务端对象)7

  self.request(客户端连接对象)8

  self.client_address(客户端IP和端口)9

  self.server(服务端对象)10

3,创建的类里必须创建一个handle()方法,当客户端连接后就会执行这个handle()方法,所以各种发送数据和接收数据都是写在这个方法里11

  在这个方法里通过对象普通字段的self.request(客户端连接对象)来做通讯操作12

  handle()客户端连接后自动执行方法13

4,ocketserver.ThreadingTCPServer(元祖类型IP端口, 创建的类名称)设置服务端的IP和端口,并且把创建的类传进去给模块14

  使用方法:定义变量 = ocketserver.ThreadingTCPServer(元祖类型IP端口, 创建的类名称)15

  如:shezhi = socketserver.ThreadingTCPServer(('127.0.0.1', 9999,), bf)16

5,serve_forever() 执行模块,循环等待客户端连接,能处理并发操作,一旦有客户端连接就会执行创建类里的handle方法17

  使用方法:设置服务端的IP和端口变量.serve_forever() 18

  如:shezhi.serve_forever()19

并发操作服务端代码20

#!/usr/bin/env python
# -*- coding:utf8 -*-
"""创建并发服务端"""
import socketserver #导入模块 """创建类"""
class bf(socketserver.BaseRequestHandler): #创建一个类,继承两个类socketserver和BaseRequestHandler,注意必须创建一个类来继承这两个模块内部指定的类
"""定义方法"""
def handle(self):
#对象自动封装了(客户端连接对象),(客户端IP和端口),(服务端对象)
# print self.request(客户端连接对象),self.client_address(客户端IP和端口),self.server(服务端对象)
b = self.request #客户端连接对象
b.sendall(bytes("你好欢迎你",encoding='utf-8')) #根据accept()接收到客户端连接对象信息,向客户端发送信息 while True: #当客户端连接成功后,进入循环,保持与客户端的通讯
j = b.recv(1024)#接收客户端发来的信息
j2 = str(j, encoding='utf-8') #将接收到的客户端信息转换成字符串
if j2 == "q": #判断客户端输入q,表示不再与服务端通讯,跳出循环,不在保持客户端的通讯
break
b.sendall(bytes(j2+"好",encoding='utf-8')) #将接收到客户端的信息加上一个好字,在发送给客户端 """设置服务端IP端口,并且把创建类传入socketserver模块"""
shezhi = socketserver.ThreadingTCPServer(('127.0.0.1', 9999,), bf) #设置服务端的IP和端口,并且把创建的类传进去 """执行socketserver模块"""
shezhi.serve_forever() #执行模块,循环等待客户端连接,能处理并发操作,一旦有客户端连接就会执行创建类里的handle方法

并发操作服务端流程图21

重点:注意传输数据时的粘包问题22

粘包就是一端发了两次信息或数据,第一次发的有可能计算机缓冲区还没发出去,第二次的信息就发到了缓冲区,这样两次的信息粘在一起发出去了,为了避免粘包问题,在第一次发送后接收一下另外一端是否接收到第一次发的信息,如果接收到才发第二次,如果没接收到就不发用,recv()阻塞,

 

第五十四节,socketserver通讯模块实现并发操作,真多线程并发的更多相关文章

  1. 第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection)

    第三百五十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—数据收集(Stats Collection) Scrapy提供了方便的收集数据的机制.数据以key/value方式存储,值大多是计数 ...

  2. 第一百五十四节,封装库--JavaScript,表单验证--提交验证

    封装库--JavaScript,表单验证--提交验证 将表单的所有必填项,做一个判断函数,填写正确时返回布尔值 最后在提交时,判断每一项是否正确,全部正确才可以 提交 html <div id= ...

  3. 第三百一十四节,Django框架,自定义分页

    第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...

  4. centos Linux系统日常管理1 cpuinfo cpu核数 命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ,lsof ,pidof 第十四节课

    centos Linux系统日常管理1  cpuinfo cpu核数   命令 w, vmstat, uptime ,top ,kill ,ps ,free,netstat ,sar, ulimit ...

  5. 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则

                                                                               第十四节过拟合解决手段L1和L2正则 第十三节中, ...

  6. 第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册

    第三百八十四节,Django+Xadmin打造上线标准的在线教育平台—路由映射与静态文件配置以及会员注册 基于类的路由映射 from django.conf.urls import url, incl ...

  7. 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表

    第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...

  8. 第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理

    第三百六十四节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mapping映射管理 1.映射(mapping)介绍 映射:创建索引的时候,可以预先定义字 ...

  9. 第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装

    第三百五十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)介绍以及安装 elasticsearch(搜索引擎)介绍 ElasticSearch是一个基于 ...

随机推荐

  1. Chrome浏览器加载CSS文件TTFB waiting超时的奇葩问题

    今天本来调试 requirejs 加载js异常的问题,试了下Chrome浏览器,结果意外发现这个 CSS 加载异常的BUG,非常非常奇怪. 本地测试环境是 wi7x64 安装的 XAMPP 3.2.1 ...

  2. hdu1043

    #include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#inclu ...

  3. openstack私有云布署实践【8.1 身份认证keystone的API创建(科兴环境)】

    其中一台controller上面加入环境变量,我选kxcontroller1,关注的是endpoint的名称不一样,其它创建的参数与测试环境一致 export OS_TOKEN=venicchina ...

  4. LR日志解析

    在录制和回放的时候,VU会分别把发生的事件记录成日志文件,这些日志有利于我们跟踪VU和服务器的交互过程. 1.回放日志(Replay log) 脚本回放运行时的输出都记在这个log里. "输 ...

  5. Jquery Easyui与Jquery Bootstrap(Metronic Bootstrap)的简单比较

    1,通常来看WEB前端用 bootstrap 比较好,后台用EASYUI比较好.Easyui适合工厂企业的管理系统如ERP,CRM之类的,Bootstrap适用于多屏跨设备浏览. 简言之,一个适合上班 ...

  6. nohup及/dev/null使用

    1.nohup    ----后台执行,执行记录默认输出到当前目录下的nohup.out文件         nohup find /etc -name passwd 2./dev/null介绍 把/ ...

  7. 面向对象---java代码块

    概念:代码块是指用{}括起来的一段代码. 根据位置及声明的关键字不同,代码块可分为普通代码块.构造块.静态代码块.同步代码块4种. 1.普通代码块: 直接在方法中或在语句中定义 public clas ...

  8. CodeForces 677D Vanya and Treasure

    $dp$,树状数组. 很明显这是一个$DAG$上的$dp$,由于边太多,暴力$dp$会超时,需要优化. 例如计算$dp[x][y]$,可以将区域分成四块,$dp[x][y]$取四块中的最小值,每一块用 ...

  9. 驱动相关Error

    驱动中 fltKernel.h报 EPROCESS和PETHREAD重定义异常解决办法 驱动编写中经常会莫名出现 error C2371: 'PEPROCESS' : redefinition; di ...

  10. Unity人工智能学习—确定性AI算法之追踪算法二

    转自:http://blog.csdn.net/zhangxiao13627093203/article/details/47658673 上一篇讲到了追踪算法的比较简单的形式,看上去比较假,因为AI ...