python epoll实现异步socket
一、同步和异步:
在程序执行中,同步运行意味着等待调用的函数、线程、子进程等的返回结果后继续处理;异步指不等待当下的返回结果,直接运行主进程下面的程序,等到有返回结果时,通知主进程处理。有点高效。
二、epoll实现异步网络通信:
首先epoll只支持linux下的python。
服务端实现epoll异步的主要流程就是如下代码,讲解将在代码里面书写:
# -*- coding:utf -*- import socket
import select
'''
需要用到的lib文件:
socket、select
'''
if __name__ == "__main__":
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#IP地址端口复用
ipaddress = "127.0.0.1"
port = 33445
address = (ipaddress,port)
serverfd = server.fileno()
server.bind(address)
serverdict = {}
serverdict[serverfd] = server
epoll = select.epoll()#创建epoll对象
epoll.register(serverfd,select.EPOLLIN)#注册消息类型(输入)
server.listen(5)
while True:
events = epoll.poll(1)#创建事件队列
for fileno,event in events:
if fileno == serverfd:
(client,address) = socket.accept()
print "<-----",client,"----",address,"----->"
client.setblocking(0)
epoll.register(client.fileno(),select.EPOLLIN)#注册事件队列
serverdict[client.fileno()] = client
elif event & select.EPOLLIN:#当有事件时候处理
print "client:",fileno
data = serverdict[fileno].recv(4096)
print data
核心步骤如下:
#创建epoll
epoll = select.epoll()
#注册事件队列
epoll.register(socketname.filefd,select.EPOLLIN)#EPOLLIN是事件类型
#创建事件队列:
events = epoll.poll(1)
#事件队列的数据结构:
#(文件对象描述符,事件消息)
#检测事件 进行处理:
for (fd,event) in events:
if event & select.EPOLLIN:
do_somethings()
#常用事件类型:
'''
EPOLLIN Available for read
EPOLLOUT Available for write
EPOLLPRI Urgent data for read
EPOLLERR Error condition happened on the assoc. fd
EPOLLHUP Hang up happened on the assoc. fd
EPOLLET Set Edge Trigger behavior, the default is Level Trigger behavior
EPOLLONESHOT Set one-shot behavior. After one event is pulled out, the fd is internally disabled
EPOLLRDNORM Equivalent to EPOLLIN
EPOLLRDBAND Priority data band can be read.
EPOLLWRNORM Equivalent to EPOLLOUT
EPOLLWRBAND Priority data may be written.
EPOLLMSG Ignored.
'''
其他常用的函数:
epoll.close()
epoll.fileno()#返回epoll对象的文件描述符
epoll.fromfd(fd)#从给定对象创建一个epoll对象
epoll.modify(fd,eventmask)#修改文件文件描述对象的epoll事件类型
epoll.unregister(fd)取消注册
epoll.poll(timeout=xxx,maxevents=xxx)#参数均为非必填项
python epoll实现异步socket的更多相关文章
- Python的Asyncore异步Socket模块及实现端口转发的例子
Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...
- Python简易聊天工具-基于异步Socket通信
继续学习Python中,最近看书<Python基础教程>中的虚拟茶话会项目,觉得很有意思,自己敲了一遍,受益匪浅,同时记录一下. 主要用到异步socket服务客户端和服务器模块asynco ...
- Python(七)Socket编程、IO多路复用、SocketServer
本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" ...
- Python学习之路--Socket
Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. sock ...
- Python之路: socket篇
(默认)与特定的地址家族相关的协议,如果是 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议 sk import socketip_port = ()sk = socket.socket( ...
- Unity中进程间通信——使用异步Socket
开发Unity项目过程中,即时通信功能来完成服务器与客户端自定义的数据结构封装. 如果要序列化和数据封装参考:Unity3D之C#用Socket传数据包 蓝鸥3G封装的类 客户端脚本ClientScr ...
- [译]Python中的异步IO:一个完整的演练
原文:Async IO in Python: A Complete Walkthrough 原文作者: Brad Solomon 原文发布时间:2019年1月16日 翻译:Tacey Wong 翻译时 ...
- Python全栈【Socket网络编程】
Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...
- GJM :异步Socket [转载]
原帖地址:http://blog.csdn.net/awinye/article/details/537264 原文作者:Awinye 目录(?)[-] 转载请原作者联系 Overview of So ...
随机推荐
- [Django学习]模型
ORM简介 MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库 ORM是“对象-关系-映射”的简称 ...
- Linux - tar命令 压缩 和 解压
压缩 tar -cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg tar -czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后 ...
- 修改Linux文件句柄限制
1. 添加ulimit -HSn 655350 到/etc/profile 2. 配置生效 source /etc/profile 修改linux文件句柄数 分类: LINUX 2010-09 ...
- python中time类型,datetime类型的关系与互相转换
一.time模块 time模块提供各种操作时间的函数 一般有两种表示时间的方式: 第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一 ...
- link_to和其对应要跳转的的url,用path和直接路由方法
link_to和其对应要跳转的的url,用path和直接路由方法 看看link_to <% @order.each do |oo| %> <div> <%= oo.nam ...
- js学习笔记13----数组的操作
1.数组的定义 格式1:var arr=[1,2,3]; 格式2:var arr=new Array(1,2,3); //new可以省略 注意:var arr=new Array(4);如果你里面只写 ...
- 15 款优化表单的 jQuery 插件
网页上的表单提供给用户的一种交互的方式,用户输入数据,提交到服务器,等待后续的处理.这些表单在我们浏览的网页中随处可见,也容易被我们忽略. 比如,“联系我们”页面会提供一个表单给用户填写他们的信息和想 ...
- 12款优秀jQuery Ajax分页插件和教程
在这篇文章中,我为大家收集了12个基于 jQuery 框架的 Ajax 分页插件,这些插件都提供了详细的使用教程和演示.Ajax 技术的出现使得 Web 项目的用户体验有了极大的提高,如今借助优秀的 ...
- 【转】WCF入门教程二[WCF应用的通信过程]
一.概述 WCF能够建立一个跨平台的安全.可信赖.事务性的解决方案,是一个WebService,.Net Remoting,Enterprise Service,WSE,MSMQ的并集,有一副很经典的 ...
- 【转】BMP图像文件格式
5.1 BMP图像文件格式 BMP图像文件格式是游戏中常用的图像资源文件格式,BMP图像文件起源早,程序员对BMP都比较熟悉,再加上BMP格式简单,读取和写入非常容易实现,所以无论Windows的还 ...