`
leixbo
  • 浏览: 33971 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

python socket 之异步asyncore

阅读更多

      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()

 

 

 

 

   

分享到:
评论

相关推荐

    pythonsocket

    - **简介**:asyncore模块为异步处理网络连接提供了一个框架,使得编写服务器端的代码更加简洁。 - **基本使用**: - 继承自`asyncore.dispatcher`类,重写必要的方法如`handle_accept`、`handle_close`等。 #####...

    Python的Asyncore异步Socket模块及实现端口转发的例子

    ### Python的Asyncore异步Socket模块及其实现端口转发的应用 #### 一、Asyncore模块简介 在Python中,`asyncore`模块为开发者提供了一种基于异步IO的框架,用于处理网络通信中的多路复用问题。相较于传统的多线程...

    Python中asyncore异步模块的用法及实现httpclient的实例

    Python中的`asyncore`模块是Python标准库中用于构建异步网络应用的一个工具,它提供了对低级socket接口的封装,使得开发者能够方便地编写基于事件的多路复用网络程序。`asyncore`的核心是`dispatcher`类,它是对...

    Python学习之asyncore模块用法实例教程

    asyncore库是python的一个标准库,它是一个异步socket的包装。我们操作网络的时候可以直接使用socket等底层的库,但是asyncore使得我们可以更加方便的操作网络,避免直接使用socket,select,poll等工具时需要面对的...

    python_socket详解

    ### Python Socket 模块详解 #### 一、网络通信基础 在深入了解 Python 的 `socket` 模块之前,我们先来回顾一下网络通信的基础概念。 ##### 1.1 Internet通信 互联网上的通信主要依赖于 IP 协议和 TCP/UDP 协议...

    python_DB__SOCKET开源

    本项目主要关注于Python中的网络编程(Socket)和数据库操作(DB)两大方面。通过开源的方式,帮助开发者更好地理解和应用Python进行数据处理和网络交互。 ### 描述:Python_DB__SOCKET开源,主要针对数据的操作和...

    python实现异步回调机制代码分享

    本文将深入探讨如何使用Python实现异步回调机制,以及与之相关的Python反射机制。 首先,让我们来看一下提供的代码示例。这段代码使用了Python的标准库`asyncore`,它是一个用于编写异步网络程序的基础框架。`...

    Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    Python的`asyncio`模块就是基于异步IO设计的,它使用事件循环和协程实现高效的并发。 八、selectors模块 `selectors`模块是Python提供的一个用于IO多路复用的工具,它提供了不同平台下的IO选择器,如`select()`、`...

    跨平台python异步回调机制实现和使用方法

    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 标准库 中文版

    asyncore模块和asynchat模块则是高层次的异步套接字处理器。urllib模块、urlparse模块、ftplib模块、httplib模块等为实现各种网络协议提供了便利。 国际化方面,locale模块用于实现本地化,unicodedata模块提供了对...

    关于python基础教程项目5聊天服务器的实现.pdf

    Python基础教程项目5涉及到的是构建一个简单的聊天服务器,这是一个典型的网络编程应用场景,使用了Python的异步I/O库asyncore和asynchat。这个项目旨在帮助初学者理解如何使用Python来创建多用户交互的网络应用。 ...

    python标准库

    socket模块为网络通信提供了底层接口,select模块用于异步事件通知,asyncore和asynchat模块用于异步网络通信,urllib、urlparse、cookie、robotparser、ftplib、gopherlib、httplib、poplib、imaplib、smtplib、...

    python标准库(中文版)

    asyncore模块是一个异步网络事件循环,asynchat模块则用于构建异步处理类。urllib模块提供了用于读取网络资源的工具。urlparse模块用于解析URL,cookie模块提供了处理cookies的接口。robotparser模块用于解析robots....

    python标准库.pdf

    - asyncore模块:提供异步网络事件处理。 - urllib模块:用于从URL获取数据。 - ftplib, gopherlib, httplib模块:分别用于操作FTP、Gopher和HTTP协议。 8. 国际化 - locale模块:用于与语言相关的数据,比如...

    python standerd labrary中文版

    ### Python Standard Library中文版知识点概览 #### 一、前言 - **关于本书** - 本书旨在全面介绍Python标准库中的各个模块及其用法。 - 适合所有水平的Python开发者,无论是初学者还是有经验的程序员都能从中...

    python标准库中文版PDF(带章节书签).pdf

    - select、asyncore和asynchat模块用于异步通信。 - urllib、urlparse和cookie模块用于处理URL和cookie。 - ftplib、httplib、poplib和imaplib模块提供了对标准网络协议的客户端支持。 - smtplib、telnetlib和...

    python常用库介绍

    另外,像Asyncore和Asynchat提供了异步socket的支持,PycURL是一个全面的网络库,支持多种应用层协议。 在硬件控制和系统监控方面,pySerial处理串口通信,Pyvisa可以连接和控制各类硬件设备,如GPIB、RS232、USB...

    python标准库中文版PDF

    - asyncore和asynchat模块:异步套接字处理。 - urllib模块:用于读取URL的数据。 - ftp、gopher、http、poplib、imaplib和smtplib模块:提供了各种网络协议的客户端支持。 第8章为国际化处理相关模块,包含: - ...

Global site tag (gtag.js) - Google Analytics