asyncore库是python的一个标准库,它是一个异步socket的包装。我们操作网络的时候可以直接使用socket等底层的库,但是asyncore使得我们可以更加方便的操作网络,避免直接使用socket,select,poll等工具时需要面对的复杂。
该库主要包括一个函数和一个类
* loop()函数 -- 全局函数
asyncore.loop([timeout[, use_poll[, map[, count]]]])
loop()函数负责检测一个dict,dict中保存dispatcher的实例,这个字典被称为channel。每次创建一个dispatcher对象,都会把自己加入到一个默认的dict里面去(当然也可以自己指定channel)。当对象被加入到channel中的时候,socket的行为都已经被定义好,程序只需要调用loop(),一切功能就实现了。
* dispatcher基类
每一个从dispatcher继承的类的对象,都可以看作我们需要处理的一个socket,可以是TCP连接或者UDP,甚至是其它不常用的。使用容易,我们需要定义一个类,它继承dispatcher,然后我们重写(覆盖)一些方法就可以了。
示例如下
Server:
import asyncore import socket class EchoHandler(asyncore.dispatcher_with_send): def handle_read(self): data = self.recv(1024) data = data + "\0" print data if data: print "start reback data" self.send(data) print "end reback data" class EchoServer(asyncore.dispatcher): def __init__(self, host, port): asyncore.dispatcher.__init__(self) #self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.set_reuse_addr() self.bind((host, port)) #self.listen(5) self.buffer = None def handle_accept(self): pair = self.accept() if pair is not None: sock, addr = pair print 'Incoming connection from %s' % repr(addr) handler = EchoHandler(sock) server = EchoServer('',11111) asyncore.loop()
Client:
import asyncore import socket class HTTPClient(asyncore.dispatcher): def __init__(self): asyncore.dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.bind(("", 11112)) #self.connect(("localhost", 11111)) self.buffer = bytes('aaaaa') def handle_connect(self): pass def handle_close(self): self.close() def handle_read(self): print(self.recv(8192)) def writable(self): return (len(self.buffer) > 0) def handle_write(self): print "start write" self.socket.sendto(self.buffer, ("127.0.0.1", 11111)) print "end write" self.buffer = "" client = HTTPClient() asyncore.loop()
相关推荐
asyncore模块是封装过的处理socket事件的模块,采用异步的处理方式,这里我们讲来讲解Python的Asyncore异步Socket模块及实现端口转发的例子,需要的朋友可以参考下
asyncore即是一个异步的socket封装,特别是dispatcher类中包含了很多异步调用的socket操作方法,非常犀利,下面我们就来讲解Python中asyncore异步模块的用法及实现httpclient的实例
本文实例讲述了python中asyncore模块的用法,分享给大家供大家参考。具体方法如下: 实例代码如下: ##asyncore import asyncore,socket ######################################################################...
asyncore库是python的一个标准库,它是一个异步socket的包装。我们操作网络的时候可以直接使用socket等底层的库,但是asyncore使得我们可以更加方便的操作网络,避免直接使用socket,select,poll等工具时需要面对的...
本篇文字是关于IO多路复用的更深入一步的总结,上一篇Python之进程+线程+协程(事件驱动模型、IO多路复用、select与epoll)对IO多路复用进行了概念性的分析,本篇则是对阻塞IO、非阻塞IO、与异步进行通俗性的比较和...
def ds_asyncore(addr,callback,timeout=5): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(addr) r,w,e = select.select([s],[],[],timeout) if r: respose_data=s.recv(1024) callback...
def ds_asyncore(addr,callback,timeout=5): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(addr) r,w,e = select.select([s],[],[],timeout) if r: respose_data=s.recv(1024) callback...
Python参考手册,官方正式版参考手册,chm版。以下摘取部分内容:Navigation index modules | next | Python » 3.6.5 Documentation » Python Documentation contents What’s New in Python What’s New In ...
本文实例讲述了Python基于select实现的socket服务器。分享给大家供大家参考,具体如下: 借鉴了asyncore模块中select.select的使用方法 import socket import traceback import select EOL1 = b'\n\n' EOL2 = b'\n\...
该聊天系统的代码的基础是 Python 的 asyncore 模块(它提供了以异步的方式写入套接 字服务的客户端和服务器的基础结构)。采用 Socket 通信这一种比较原始的方案实现 RPC 框架。 这个聊天系统有两份 python 文件...
aiosmtpd-基于异步的SMTP服务器 Python标准库基于旧的异步库和在模块中包括一个基本的服务器。 这些模块已经很老了,并且肯定显示了它们的年龄。 asyncore和asynchat是难以使用,理解,扩展和修复的API。 随着Python...
服务器端涉及到asyncore、asynchat和socket这几个模块,客户端用到了telnetlib、wx、time和thread这几个模块。 3.所需环境 本次课中编写客户端需要用到wxPython,它是一个GUI工具包,请先使用下面的命令安装: $ ...
asyncore 模块 o 7.5. asynchat 模块 o 7.6. urllib 模块 o 7.7. urlparse 模块 o 7.8. cookie 模块 o 7.9. robotparser 模块 o 7.10. ftplib 模块 o 7.11. gopherlib 模块 o 7.12. httplib 模块 o 7.13. poplib ...
本文实例讲述了python实现的文件同步服务器。分享给大家供大家参考。具体实现方法如下: 服务端使用asyncore, 收到文件后保存到本地。 客户端使用pyinotify监视目录的变化 ,把变动的文件发送到服务端。 重点: 1. ...
python模块详解 各个模块的详解 核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10....
以下python模块:-evdev-asyncore 硬件: USB人机接口(HID)踏板,例如[this] { 。 任何HID踏板都可以使用,尽管您需要修改一条线 设置/使用 开始之前,您需要为踏板执行一次设置。 此过程有两个方面: 查找并...
Transmit-with-Cipher PY使用asyncore实现的一个简单端口转发,可选流量RC4