学习Twisted时,有时老感觉摸不着边际,虽然说要用什么twisted都给你实现了,但心里总有不踏实之感。

遂从twisted.internet.protocol.Protocol这个所有协议的基类入手分析之。

打开twisted.internet.protocol.py

ps:学python时感觉模块和类的名称比较混乱,由上面这个twisted.internet.protocol.Protocol这个就可见一般,不过只要记住一条

[Python中类名首字母大写,模块名函数等首字母小写]那么很容易区分其中protocol是模块,Protocol中模块中的一个类。happy

twisted.internet.protocol.py这个文件很重要, 协议的基类工厂类基本都在这里。

注意:以下代码省略注释

首先看Protocol 的code:
class Protocol(BaseProtocol):

implements(interfaces.IProtocol)

def dataReceived(self, data):

def connectionLost(self, reason=connectionDone):

很简洁,定义了两个方法,这两个方法写过twisted的应该都见过,为什么没有实现这两个方法?,呵呵 这两个函数都是被twisted调用的,需要你自己实现。还有就是implements(interfaces.IProtocol),我也不知道这个是干嘛。姑且认为是python的 实现接口吧。

IProtocol的定义:

class IProtocol(Interface):

def dataReceived(data):

def connectionLost(reason):

def makeConnection(transport):

def connectionMade():
 什么?又没实现?接口嘛 不必惊慌。

看看BaseProtocol:

class BaseProtocol:
    """This is the abstract superclass of all protocols.

If you are going to write a new protocol for Twisted, start here.  The
    docstrings of this class explain how you can get started.  Any protocol
    implementation, either client or server, should be a subclass of me.

My API is quite simple.  Implement dataReceived(data) to handle both
    event-based and synchronous input; output can be sent through the
    'transport' attribute, which is to be an instance that implements
    L{twisted.internet.interfaces.ITransport}.

Some subclasses exist already to help you write common types of protocols:
    see the L{twisted.protocols.basic} module for a few of them.
    """

connected = 0
    transport = None

def makeConnection(self, transport):
        self.connected = 1
        self.transport = transport
        self.connectionMade()

def connectionMade(self):
        """Called when a connection is made.

This may be considered the initializer of the protocol, because
        it is called when the connection is completed.  For clients,
        this is called once the connection to the server has been
        established; for servers, this is called after an accept() call
        stops blocking and a socket has been received.  If you need to
        send any greeting or initial message, do it here.
        """

一上就是牛逼哄哄的BaseProtocol了,是说有twisted协议的基类,代码中我们可以看到transport的初始化,还有connectionMade被twisted调用。注释很详细就不多说了。下一次结合Factory来分析下。

搞IT E文太重要了。

[Python-Twisted] 协议基类源码分析。相关推荐

  1. 物联网协议之MQTT源码分析(二)

    此篇文章继上一篇物联网协议之MQTT源码分析(一)而写的第二篇MQTT发布消息以及接收Broker消息的源码分析,想看MQTT连接的小伙伴可以去看我上一篇哦. juejin.im/post/5cd66 ...

  2. Python微型Web框架Bottle源码分析

    Bottle 是一个快速,简单和轻量级的 WSGI 微型 Web 框架的 Python.它作为单个文件模块分发,除了 Python 标准库之外没有依赖关系. 选择源码分析的版本是 Release 于 ...

  3. Dubbo篇:基于Netty实现Dubbo协议编解码源码分析

    Dubbo协议解析 Dubbo协议设计参考了TCP/IP协议,包括协议头和协议体两部分.16字节报文头主要携带了魔法数(0xdabb,用于分割两个不同请求),以及当前请求报文是否是Request.Re ...

  4. wireshark协议解析器 源码分析 封装调用

    源码分析 Wireshark启动时,所有解析器进行初始化和注册.要注册的信息包括协议名称.各个字段的信息.过滤用的关键字.要关联的下层协议与端口(handoff)等.在解析过程,每个解析器负责解析自己 ...

  5. 02.并发编程(2)Thread类源码分析

    概述 在说线程之前先说下进程,进程和线程都是一个时间段的描述,是CPU工作时间段的描述. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一 ...

  6. sofa协议服务器,SOFARPC 源码分析1 - 最简使用姿势

    SOFARPC 是一个高性能.高可扩展.生产级别的 RPC 框架,由蚂蚁金服开源. 本文会提供一个 SOFARPC 最简使用示例(使用 SOFARegistry 做注册中心),之后的源码分析都会基于该 ...

  7. java vector实现的接口_java中List接口的实现类 ArrayList,LinkedList,Vector 的区别 list实现类源码分析...

    java面试中经常被问到list常用的类以及内部实现机制,平时开发也经常用到list集合类,因此做一个源码级别的分析和比较之间的差异. 首先看一下List接口的的继承关系: list接口继承Colle ...

  8. 基于XMPP协议的aSmack源码分析

    在研究如何实现Pushing功能期间,收集了很多关于Pushing的资料,其中有一个androidnp开源项目用的人比较多,但是由于长时间没有什么人去维护,听说bug的几率挺多的,为了以后自己的产品稳 ...

  9. java.lang.object源码_第三篇:java.lang.Object 类源码分析

    Object所包含的方法如下: ① public Object(); 构造函数: 大部分情况下,类对象的声明,都是通过构造函数完成的(Java中规定:在类定义过程中,对于未定义构造函数的类,默认会有一 ...

最新文章

  1. C++开源跨平台类库集
  2. 红旗6SP1版不克不及显示NTFS内的中文文件
  3. Windows下启动停止SQL Server 2005服务
  4. 区块链应用落地的6大挑战
  5. I2C总线之(三)---以C语言理解IIC
  6. 计算机组成原理,计算机系统概论,计算机基本组成
  7. [转载][QT][SQL]sql学习记录3_sqlite之update delete like
  8. C++变量未初始的后果
  9. 背包形动态规划 fjutoj2375 金明的预算方案
  10. 润乾单元格加html点击事件_报表输入页码翻页(润乾 V2018)
  11. java和线程相关的关键字有哪些_Java中有哪些机制来保证线程安全?synchronized关键字和volatile关键字...
  12. python list 元素位置_Python将list中某个元素移至末尾
  13. PLSQL DEVELOPER编辑器的自动替换文件
  14. FreeRTOS的内存管理
  15. Linux查看CPU信息机器型号等硬件信息
  16. spring cloud bus
  17. 几个系统级崩溃问题和h5加载页面崩溃问题及解决方案
  18. Win10 自定义右键新建菜单
  19. PJzhang:有关火绒新版本以及火绒的一些介绍
  20. Mac运行越来越慢的解决办法

热门文章

  1. 基于概率分析的智能AI扫雷程序秒破雷界世界纪录
  2. IEC61850变电站基本通信结构-原理和模型_6客户-服务器
  3. 【华为笔试】安排面试官。有M个面试官,每个面试官熟悉的编程语言是一个列表,有N个面试者,按照面试者的机试选择的语言分配面试官进行面试(Python)
  4. 请你谈谈COOKIE的弊端
  5. PLD-0201油液颗粒度分析仪的远传远控设计
  6. C++ 实现输出 n个不重复整数任取m个数的所有组合(附C语言实现)
  7. 黑马JAVA P85-87 ATM完整版
  8. win7修复计算机无鼠标,win7鼠标不动了怎么修复_win7鼠标不动了的解决办法
  9. Android7.0 MTK 设置默认桌面
  10. 【hdu 3579】Hello Kiki