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. jquery中动态新增的元素节点无法触发事件解决办法

    在使用jquery中动态新增的元素节点时会发现添加的事件是无法触发的,我们下面就为各位来详细的介绍此问题的解决办法. 比如做一个ajax读取留言列表的时候,每条留言后面有个回复按钮,class为“re ...

  2. ipad 横屏 竖屏 CSS

    /* iPads (landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-devic ...

  3. 【01背包】HDU 2602 Bone Collector (模板题)

    Problem Description Many years ago , in Teddy's hometown there was a man who was called "Bone C ...

  4. mongodb tip-2

    1.or 查询的格式: var condition = {$or:[{field:1},{field:2}]} 2.字符串存储日期也可以用$gt $gte $lt $lte 直接比较 var cond ...

  5. LeetCode 213. House Robber II

    Note: This is an extension of House Robber. After robbing those houses on that street, the thief has ...

  6. Vultr新加坡机房速度怎么样?值得购买吗?最新评测!

    2016年9月,Vultr vps开通了新加坡Singapore机房线路.与知名的竞争对手Digitalocean和Linode一样,新加坡机房对亚洲速度友好,是讨用户欢心的一个进步. 但是,vult ...

  7. [Q]注册申请码获取工具问题

    问题一: 异常信息: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.Reflectio ...

  8. [河南省ACM省赛-第三届] 素数 (nyoj 169)

    #include <iostream> #include <cstdio> #include <queue> #include <cstring> #i ...

  9. 默认conf指向位置

    查看nginx 默认配置文件所在位置 >> nginx -t  print --> nginx: the configuration file /etc/nginx/nginx.co ...

  10. 使用NCoding归档进行存储数据时候报错

    问题:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Demo1.UserInfo ...