`
leixbo
  • 浏览: 32621 次
  • 性别: 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()

 

 

 

 

   

分享到:
评论

相关推荐

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

    asyncore模块是封装过的处理socket事件的模块,采用异步的处理方式,这里我们讲来讲解Python的Asyncore异步Socket模块及实现端口转发的例子,需要的朋友可以参考下

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

    asyncore即是一个异步的socket封装,特别是dispatcher类中包含了很多异步调用的socket操作方法,非常犀利,下面我们就来讲解Python中asyncore异步模块的用法及实现httpclient的实例

    Python中asyncore的用法实例

    本文实例讲述了python中asyncore模块的用法,分享给大家供大家参考。具体方法如下: 实例代码如下: ##asyncore import asyncore,socket ######################################################################...

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

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

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

    本篇文字是关于IO多路复用的更深入一步的总结,上一篇Python之进程+线程+协程(事件驱动模型、IO多路复用、select与epoll)对IO多路复用进行了概念性的分析,本篇则是对阻塞IO、非阻塞IO、与异步进行通俗性的比较和...

    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异步回调机制实现和使用方法

    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...

    python3.6.5参考手册 chm

    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服务器

    本文实例讲述了Python基于select实现的socket服务器。分享给大家供大家参考,具体如下: 借鉴了asyncore模块中select.select的使用方法 import socket import traceback import select EOL1 = b'\n\n' EOL2 = b'\n\...

    src_based_on_socket.zip

    该聊天系统的代码的基础是 Python 的 asyncore 模块(它提供了以异步的方式写入套接 字服务的客户端和服务器的基础结构)。采用 Socket 通信这一种比较原始的方案实现 RPC 框架。 这个聊天系统有两份 python 文件...

    aiosmtpd:基于asyncio的Python stdlib smtpd.py的重新实现

    aiosmtpd-基于异步的SMTP服务器 Python标准库基于旧的异步库和在模块中包括一个基本的服务器。 这些模块已经很老了,并且肯定显示了它们的年龄。 asyncore和asynchat是难以使用,理解,扩展和修复的API。 随着Python...

    Python实现基于C/S架构的聊天室功能详解

    服务器端涉及到asyncore、asynchat和socket这几个模块,客户端用到了telnetlib、wx、time和thread这几个模块。 3.所需环境 本次课中编写客户端需要用到wxPython,它是一个GUI工具包,请先使用下面的命令安装: $ ...

    艾伯特《Python标准库》中文版

    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实现的文件同步服务器实例

    本文实例讲述了python实现的文件同步服务器。分享给大家供大家参考。具体实现方法如下: 服务端使用asyncore, 收到文件后保存到本地。 客户端使用pyinotify监视目录的变化 ,把变动的文件发送到服务端。 重点: 1. ...

    python模块详解

    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....

    software-vim-clutch:Linux上针对vim的脚踏板控制的软件增强实现,无需修改硬件踏板

    以下python模块:-evdev-asyncore 硬件: USB人机接口(HID)踏板,例如[this] { 。 任何HID踏板都可以使用,尽管您需要修改一条线 设置/使用 开始之前,您需要为踏板执行一次设置。 此过程有两个方面: 查找并...

    Transmit-with-Cipher:流量简单加密的端口转发

    Transmit-with-Cipher PY使用asyncore实现的一个简单端口转发,可选流量RC4

Global site tag (gtag.js) - Google Analytics