zoukankan      html  css  js  c++  java
  • Twisted 网络编程学习(一)

          Twisted是一个事件驱动的框架。每个事件驱动框架包括了一个特殊的函数叫做事件循环。一旦开始,事件循环就不会停止,当运行时,事件循环等待事件发生,一旦事件发生,就调用对应的事件处理函数。

         在Twisted中,实现事件循环的对象叫reactor.可以把reactor看做是Twisted应用程序的中央神经系统,除了负责事件循环,reactor还处理许多许多其他也很重要的任务:如调度,创建网络连接,侦听其它机器的连接等。为了运行reactor做所有上述工作,必须启动它的事件循环,让其控制你的程序

       1: from twisted.internet import reactor
       2:  
       3: reactor.run()

    reactor的callLater方法用来建立调度事件。

       1: reactor.callLater(seconds,function,etc)

    所有的网络程序都以一个基本的步骤开始:创建一个连接

       1: reactor.connectTCP(ip,port,ClientFactory’)

        ClientFactory的工作是管理连接相关的事件,并为每个成功的连接创建一个新的Protocol对象。一旦连接建立了,Protocol对象就将接管,其职责是负责发送和接收数据,并决定何时关闭连接

        Deferred可能是除reactor之外在Twisted中最重要的对象。你将在Twisted应用中频繁的使用Deferred对象,该对象跟踪一个异步动作,在动作完成时得到结果。

        在写一个开始异步动作的函数时,返回一个Deferred对象,当动作完成时,以返回值为参数调用Deferred的回调函数。如果动作失败了,以异常为参数调用Deferred.errback

       1: Deferred.addCallback(function)
       2:  
       3: Deferred.addErrback(function)
       4:  

    DefferredList将跟踪在列表中的结果,当所有结果都结束了,将会返回一个元组列表的格式。如果Deffered成功完成,元组的第一个值将会为TRue,第二个值将会包含Defered返回的结果。如果失败,第一个值将会为False,第二个值将会包含一个Failure对象。

          覆写dataReceived方法就能控制当有数据被接收时的行为。而self.transport.write可以用来发送数据。

       1: twisted.internet.stdio.StandardIO(IProtocol)

    t.i.stdio.StandardIO将传入的协议与当前进程的标准输入输出连接

    twisted.protocols.basic.LineReciever是比Protocol.LineReceiver略微高级的协议,可以自动的把输入分隔成行的形式,使得每次处理一行

    对于ServerFactory的子类,reactor.ConnectTcp只需要两个参数,一个是端口号,一个是该子类

  • 相关阅读:
    AutoCompleteTextView 简单用法
    照片颠倒问题及查询摄像头参数问题的解决
    Android Studio-引用jar及so文件
    file新建文件及文件夹
    appcompat_v7报错
    fresco加载本地图片、gif资源
    android根据图片路径显示图片
    sublime text3 及相关的安装
    win 10通过自带IIS搭建ftp
    LCA
  • 原文地址:https://www.cnblogs.com/westwind/p/2595870.html
Copyright © 2011-2022 走看看