16.5 Twisted框架介绍
Twisted是一个完全事件驱动的网络框架。
Twisted还不是Python标准库的一部分,要使用它,你必须另外下载并安装它。
twisted
http://twistedmatrix.com/trac/
zope.interface
http://pypi.python.org/pypi/zope.interface/3.8.0#downloads
.egg install
http://pypi.python.org/pypi/setuptools#downloads
16.5.1 创建一个Twisted Reactor TCP服务器
我们从Protocol类中派生出TSServProtocol类作为时间戳服务器。然后重写connectionMade()函数,这个函数在客户端连接的时候被调用,以及dataReceived()函数,这个函数在客户端通过网络发送数据过来时被调用。reactor把数据当成参数传到这个函数中,这样我们就不用自己去解释数据了。
from twisted.internet import protocol, reactor
from time import ctime
PORT = 54321
class TSServProtocol(protocol.Protocol):
def connectionMade(self):
clnt = self.clnt = self.transport.getPeer().host
print '... connected from:', clnt
def dataReceived(self, data):
self.transport.write('[%s] %s'% (ctime(), data))
factory = protocol.Factory()
factory.protocol = TSServProtocol
print 'Waiting for connection...'
reactor.listenTCP(PORT, factory)
reactor.run()
16.5.2 创建一个Twisted Reactor TCP客户端
from twisted.internet import protocol, reactor
HOST = 'localhost'
PORT = 54321
class TSClntProtocol(protocol.Protocol):
def sendData(self):
data = raw_input('> ')
if data:
print '...sending %s...' % data
self.transport.write(data)
else:
self.transport.loseConnection()
def connectionMade(self):
self.sendData()
def dataReceived(self, data):
print data
self.sendData()
class TSClntFactory(protocol.ClientFactory):
protocol = TSClntProtocol
clientConnectionLost = clientConnectionFailed = lambda self, connector, reason: reactor.stop()
reactor.connectTCP(HOST, PORT, TSClntFactory())
reactor.run()