【python】使用asyncore进行异步通信
参考博文:http://blog.csdn.net/livefun/article/details/8721772
参考博文:https://www.cnblogs.com/tomato0906/articles/4807774.html
Asyncore是对服务器端socket的一个封装,主要解决多用户通信的问题。
用户需要继承asyncore.dispatcher, 并且对其一些方法进行重写。
一般来说需要重写的方法:
handle_read: 当socket有可读数据的时候执行这个方法,是否有可读数据看readable()方法的返回结果
handle_write: 当socket有可写数据的时候执行这个方法,是否有可写数据看writable()方法的返回结果
handle_expt: 当socket出现OOB异常的时候执行这个方法
handle_connect: 当有客户端连接的时候,执行该方法
handle_close: 当连接关闭的时候执行这个方法
handle_accept: 当作为server_socket监听的时候,有客户端连接的时候,用这个方法处理
可使用的方法:
create_socket(family, type): 创建一个套接字并且与对象绑定
connect(address): 连接一个socket server
send(data): 发送数据
recv(buffer_size): 接受数据到内存缓存
listen(backlog): socket_server 开始监听
bind(address): socket_server 绑定端口
accept(): socket_server接受客户端连接
close(): 关闭socket
一个典型的服务器例子:
init里面:
create_socket(INET, STREAM)
set_reuse_addr()
bind('', 12345)
listen(5)
handle_accept:
accept()
init server
asyncore.loop()
【python】使用asyncore进行异步通信的更多相关文章
- Python的Asyncore异步Socket模块及实现端口转发的例子
Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...
- python通过protobuf实现rpc
由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...
- python 各模块
01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...
- python 实现聊天室
所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里 源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步 ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- python:rs, ws, es = select.select(inputs, [], []) --报错error 10022
昨晚折腾的1个多钟,直到3点多才睡,感觉自己也是热爱代码了,敲3个多钟一点也不累(其实是为了凌晨6点起来抢票回家了^_^) 练习python中select进行异步通信-防止socket.recv方法阻 ...
- Python Standard Library
Python Standard Library "We'd like to pretend that 'Fredrik' is a role, but even hundreds of vo ...
- python设计模式之模板模式
python设计模式之模板模式 编写优秀代码的一个要素是避免冗余.在面向对象编程中,方法和函数是我们用来避免编写冗余代码的重要工具. 现实中,我们没法始终写出100%通用的代码.许多算法都有一些(但并 ...
- WireShark 抓取Telnet包
用Python的Asyncore.dispatcher写了个小服务器,客户端使用telnet连接上去之后一直显示连接丢失,想抓下包看看 抓包结果如下: 服务器在192.168.1.102:8080 端 ...
随机推荐
- java 多线程 day01 创建线程
线程,即代码的执行路径java 面向对象编程.所以线程在java中也是用对象来表示的,创建线程对象的类就是 Thread如下代码即开启一个新的线程,通过线程对象的start方法,即可启动线程 Thre ...
- 编译hadoop2.6.0 cdh 5.4.5 集成snappy压缩
原文地址:http://www.cnblogs.com/qiaoyihang/p/6995146.html 自带的为32位库,故需要把64为重编译进去 1.下载源码:http://archive-pr ...
- corethink功能模块探索开发(十八)前台页面插入jit前端数据可视化库
效果图: 1.静态文件放入View目录中 在View目录下新建Public目录,在Public目录下新建js.css目录. 把jit的资源放入对应目录中 2.在html中引入jit Applicati ...
- wtforms Form实例化流程(源码解析)
class LoginForm(Form): #首先执行后得到的结果是UnboundField()对象 name=simple.StringField( label='用户名', validato ...
- delphi webbrowser 获取iframe
procedure TForm1.Button4Click(Sender: TObject);var Index: Integer; Document: IHTMLDocument2; FrameId ...
- python之路 面向对象基础 XML
一.面向对象基础 1.类(Class): 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 类变量:类变量在整个实例化的对象中是公用的.类变量定义 ...
- PAT 天梯赛 L1-008. 求整数段和 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-008 AC代码 #include <iostream> #include <cstdio&g ...
- Codeforces - 55D Beautiful numbers (数位dp+数论)
题意:求[L,R](1<=L<=R<=9e18)区间中所有能被自己数位上的非零数整除的数的个数 分析:丛数据量可以分析出是用数位dp求解,区间个数可以转化为sum(R)-sum(L- ...
- 【Github教程】史上最全github使用方法:github入门到精通(转自eoeandroid.com)
本文来源:http://www.eoeandroid.com/thread-274556-1-1.html 另附经典教程网址 :http://wuyuans.com/2012/05/github-si ...
- 操作JavaScript数组
unshift:在数据首段添加元素. push: 在数组的末端添加元素. shift:移除并返回第一个元素,会影响 数组长度. pop:移除并返回最后一个元素.会影响 数组长度. delete 数组 ...