利用Python中SocketServer 实现客户端与服务器间非阻塞通信


Posted in Python onDecember 15, 2016

利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。

首先,先了解下SocketServer模块中可供使用的类:

BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。

TCPServer/UDPServer:基本的网络同步TCP/UDP服务器。

UnixStreamServer/ UnixDatagramServer:基本的基于文件同步TCP/UDP服务器。

ForkingMixIn/ ThreadingMixIn:实现了核心的进程化或线程化的功能;作为混合类,与服务器类一并使用以提供一些异步特性;这个类不会直接实例化。

ForkingTCPServer/ ForkingUDPServer:ForkingMixIn和TCPServer/UDPServer的组合。

BaseRequestHandler:包含处理服务请求的核心功能。这个类只用于派生,所以不会生成这个类的实例可以考虑使用StreamRequestHandler或DatagramRequestHandler。

StreamRequestHandler/ DatagramRequestHandler:用于TCP/UDP服务器的服务处理工具。

下面我们正式进入主题,这里我们采用StreamRequestHandler和ThreadingTCPServer来实现客户端与服务器并发连接非阻塞socket。

ThreadingTCPServer派生自ThreadingMixIn,主要实现核心的进程化合线程化功能。

StreamRequestHandler主要用于用于TCP/UDP服务器的服务处理工具。

一、创建SocketServerTCP服务端

[python] view plain copy
#创建SocketServerTCP服务器: 
import SocketServer 
from SocketServer import StreamRequestHandler as SRH 
from time import ctime 
host = 'xxx.xxx.xxx.xxx' 
port = 9999 
addr = (host,port) 
class Servers(SRH): 
 def handle(self): 
  print 'got connection from ',self.client_address 
  self.wfile.write('connection %s:%s at %s succeed!' % (host,port,ctime())) 
  while True: 
   data = self.request.recv(1024) 
   if not data: 
    break 
   print data 
   print "RECV from ", self.client_address[0] 
   self.request.send(data) 
print 'server is running....' 
server = SocketServer.ThreadingTCPServer(addr,Servers) 
server.serve_forever()

二、创建SocketServerTCP客户端

[python] view plain copy
from socket import * 
host = 'xxx.xxx.xxx.xxx' 
port = 9999 
bufsize = 1024 
addr = (host,port) 
client = socket(AF_INET,SOCK_STREAM) 
client.connect(addr) 
while True: 
 data = raw_input() 
 if not data or data=='exit': 
  break 
 client.send('%s\r\n' % data) 
 data = client.recv(bufsize) 
 if not data: 
  break 
 print data.strip() 
client.close()
Python 相关文章推荐
python下载文件时显示下载进度的方法
Apr 02 Python
对pandas中apply函数的用法详解
Apr 10 Python
python实现监控某个服务 服务崩溃即发送邮件报告
Jun 21 Python
获取python的list中含有重复值的index方法
Jun 27 Python
PyQt 实现使窗口中的元素跟随窗口大小的变化而变化
Jun 18 Python
python 动态调用函数实例解析
Oct 21 Python
wxPython实现列表增删改查功能
Nov 19 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
python 定义类时,实现内部方法的互相调用
Dec 25 Python
Python远程linux执行命令实现
Nov 11 Python
Python开发.exe小工具的详细步骤
Jan 27 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 #Python
利用python获取某年中每个月的第一天和最后一天
Dec 15 #Python
python中快速进行多个字符替换的方法小结
Dec 15 #Python
Python制作简易注册登录系统
Dec 15 #Python
用yum安装MySQLdb模块的步骤方法
Dec 15 #Python
Python3.6正式版新特性预览
Dec 15 #Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 #Python
You might like
PHP实现打包zip并下载功能
2018/06/12 PHP
详解在YII2框架中使用UEditor编辑器发布文章
2018/11/02 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
javascript 继承实现方法
2009/08/26 Javascript
javascript Array数组对象的扩展函数代码
2010/05/22 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
简单的Vue异步组件实例Demo
2017/12/27 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
python字符类型的一些方法小结
2016/05/16 Python
Python实现屏幕截图的代码及函数详解
2016/10/01 Python
Python 中开发pattern的string模板(template) 实例详解
2017/04/01 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python向已存在的excel中新增表,不覆盖原数据的实例
2018/05/02 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
深入解析HTML5的IndexedDB索引数据库
2015/09/14 HTML / CSS
法国在线药房:Shop Pharmacie
2019/11/26 全球购物
行政经理的岗位职责
2013/11/23 职场文书
售后客服工作职责
2014/06/16 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
初中成绩单评语
2014/12/29 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
音乐之声观后感
2015/06/04 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书