程序员

twisted基础知识记录(一)

2017-06-03  本文已影响126人  ikaroskun

Transports

Transport代表着两个通过网络通信的端对端的连接,Transports负责描述连接的细节部分,如流或者数据包导向,流量控制和可靠性,TCP,UDP和Unix的套接字是Transpos的例子。他们被设计为'最大可重用的最小功能单元'并且其余协议实现分离,允许许多协议使用相同类型的传输。

Transports实现了ITransport接口。具有以下几种方法:

write --- 按照非阻塞的方式按顺序将一些数据写入物理连接
writeSequence---将一个字符串列表写入物理连接
loseConnection---写入所有挂起的数据,然后关闭连接
getPeer---得到此连接的远程地址
getHost---得到连接这一端的地址

Transports从protocols中解耦也使得测试这两层更加容易

Protocols

Protocols描述了如何异步处理网络事件。其中HTTP,DNS和IMAP是应用协议的示例。

Protocols实现了IProtocol接口,具体包括以下方法:

makeConnection---创建一个连接绑定一个transport和一个server
connectionMade---在连接创建时被调用
dataReceived---在接收到数据是被调用
connectionLost---在断开连接时被调用

对于reactor、transport和protocols之间的关系,最好的方法就是用一个例子来描绘,下面给出一个示例(Server+client)

首先是一个Server实现:

from twisted.internet import protocol, reactor

class Echo(protocol.Protocol):
    def dataReceived(self, data):
    # 一旦有数据到来就返回一个回应
    self.transport.write(data)

class EchoFactory(protocol.Factory):
    def buildProtocol(self, addr):
    return Echo()

reactor.listenTCP(8000, EchoFactory())
reactor.run()

然后是一个客户端

from twisted.internet import reactor, protocol

class EchoClient(protocol.Protocol):
    def connectionMade(self):
        self.transport.write("hello, world!")

    def dataReceived(self, data):
        print "Server said:", data
        self.transport.loseConnection()

    def connectionLost(self, reason):
        print "connection lost"

class EchoFactory(protocol.ClientFactory):
    def buildProtocol(self, addr):
        return EchoClient()

    def clientConnectionFailed(self, connector, reason):
        print "Connection failed - goodbye!"
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print "Connection lost - goodbye!"
        reactor.stop()

reactor.connectTCP("localhost", 8000, EchoFactory())
reactor.run()

上述代码的描述:

运行服务器脚本启动侦听端口8000上的连接的TCP服务器。服务器使用Echo协议(自定义),并通过TCP传输写出数据。

运行客户端与服务端建立TCP连接,回应服务器响应,然后终止连接并停止reactor

Factory主要用于生产连接两端的协议实例

Transports是异步双向的

connectTCP负责与reactor注册回调,以便在数据可以从socket上读取时得到通知。

by---http://www.aosabook.org/en/twisted.html
将Twisted的知识再系统深入学习一遍。。。。

上一篇 下一篇

猜你喜欢

热点阅读