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的知识再系统深入学习一遍。。。。
网友评论