【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 端 ...
随机推荐
- SVG Use(转)
转自:http://www.zhangxinxu.com/wordpress/2014/07/introduce-svg-sprite-technology/ 未来必热:SVG Sprite技术介绍 ...
- 阿里云配置mysql远程连接
默认是不能用客户端远程连接的,阿里云提供的help.docx里面做了设置说明,mysql密码默认存放在/alidata/account.log 首先登录: mysql -u root -h local ...
- yum安装mysql5.6
1.检查系统是否安装其他版本的MYSQL数据 yum list installed | grep mysql yum -y remove mysql-libs.x86_64 2.安装及配置 wget ...
- Rest Framework源码流程解析
目录: 一 整体流程 二 具体流程 一 请求进来之后,都要先执行dispatch方法,dispatch方法根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的d ...
- php采集
采集思路 采集程序的思路很简单大体可以分为以下几个步骤: 1. 获取远程文件源代码(file_get_contents或用fopen). 2.分析代码得到自己想要的内容(这里用正则匹配,一般 ...
- 多线程 wait和sleep区别
wait和sleep区别共同点: 1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回. 2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停 ...
- springboot-vue项目后台2---pojo对查询结果手动分组
<resultMap id="PResult" type="packs" > <result column="device_type ...
- Filter FASTA files
Use a regular expression for filtering sequences by id from a FASTA file, e.g. just certain chromoso ...
- NOIP2018没有什么新闻
noip结束了.站在六中门口,回头望了一眼偌大的校园,萧瑟的秋风卷起残败的落叶,纷纷扬扬地洒落,洒落在OIer的心头. 今年的noip没有什么新闻,有的只是又一次被喷的题,和又一次挂掉的我. Day ...
- GoLang激活码
虽然行为不太好,但是购买的话实在是比较贵. 进入软件,Help-Register,选择License Server,输入 http://idea.youbbs.org 激活即可.