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模块为异步处理网络连接提供了一个框架,使得编写服务器端的代码更加简洁。 - **基本使用**: - 继承自`asyncore.dispatcher`类,重写必要的方法如`handle_accept`、`handle_close`等。 #####...
### Python的Asyncore异步Socket模块及其实现端口转发的应用 #### 一、Asyncore模块简介 在Python中,`asyncore`模块为开发者提供了一种基于异步IO的框架,用于处理网络通信中的多路复用问题。相较于传统的多线程...
Python中的`asyncore`模块是Python标准库中用于构建异步网络应用的一个工具,它提供了对低级socket接口的封装,使得开发者能够方便地编写基于事件的多路复用网络程序。`asyncore`的核心是`dispatcher`类,它是对...
asyncore库是python的一个标准库,它是一个异步socket的包装。我们操作网络的时候可以直接使用socket等底层的库,但是asyncore使得我们可以更加方便的操作网络,避免直接使用socket,select,poll等工具时需要面对的...
### Python Socket 模块详解 #### 一、网络通信基础 在深入了解 Python 的 `socket` 模块之前,我们先来回顾一下网络通信的基础概念。 ##### 1.1 Internet通信 互联网上的通信主要依赖于 IP 协议和 TCP/UDP 协议...
本项目主要关注于Python中的网络编程(Socket)和数据库操作(DB)两大方面。通过开源的方式,帮助开发者更好地理解和应用Python进行数据处理和网络交互。 ### 描述:Python_DB__SOCKET开源,主要针对数据的操作和...
本文将深入探讨如何使用Python实现异步回调机制,以及与之相关的Python反射机制。 首先,让我们来看一下提供的代码示例。这段代码使用了Python的标准库`asyncore`,它是一个用于编写异步网络程序的基础框架。`...
Python的`asyncio`模块就是基于异步IO设计的,它使用事件循环和协程实现高效的并发。 八、selectors模块 `selectors`模块是Python提供的一个用于IO多路复用的工具,它提供了不同平台下的IO选择器,如`select()`、`...
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...
asyncore模块和asynchat模块则是高层次的异步套接字处理器。urllib模块、urlparse模块、ftplib模块、httplib模块等为实现各种网络协议提供了便利。 国际化方面,locale模块用于实现本地化,unicodedata模块提供了对...
Python基础教程项目5涉及到的是构建一个简单的聊天服务器,这是一个典型的网络编程应用场景,使用了Python的异步I/O库asyncore和asynchat。这个项目旨在帮助初学者理解如何使用Python来创建多用户交互的网络应用。 ...
socket模块为网络通信提供了底层接口,select模块用于异步事件通知,asyncore和asynchat模块用于异步网络通信,urllib、urlparse、cookie、robotparser、ftplib、gopherlib、httplib、poplib、imaplib、smtplib、...
asyncore模块是一个异步网络事件循环,asynchat模块则用于构建异步处理类。urllib模块提供了用于读取网络资源的工具。urlparse模块用于解析URL,cookie模块提供了处理cookies的接口。robotparser模块用于解析robots....
- asyncore模块:提供异步网络事件处理。 - urllib模块:用于从URL获取数据。 - ftplib, gopherlib, httplib模块:分别用于操作FTP、Gopher和HTTP协议。 8. 国际化 - locale模块:用于与语言相关的数据,比如...
### Python Standard Library中文版知识点概览 #### 一、前言 - **关于本书** - 本书旨在全面介绍Python标准库中的各个模块及其用法。 - 适合所有水平的Python开发者,无论是初学者还是有经验的程序员都能从中...
- select、asyncore和asynchat模块用于异步通信。 - urllib、urlparse和cookie模块用于处理URL和cookie。 - ftplib、httplib、poplib和imaplib模块提供了对标准网络协议的客户端支持。 - smtplib、telnetlib和...
另外,像Asyncore和Asynchat提供了异步socket的支持,PycURL是一个全面的网络库,支持多种应用层协议。 在硬件控制和系统监控方面,pySerial处理串口通信,Pyvisa可以连接和控制各类硬件设备,如GPIB、RS232、USB...
- asyncore和asynchat模块:异步套接字处理。 - urllib模块:用于读取URL的数据。 - ftp、gopher、http、poplib、imaplib和smtplib模块:提供了各种网络协议的客户端支持。 第8章为国际化处理相关模块,包含: - ...