from twisted.internet.protocol import Protocol
class QOTD(Protocol):
def connectionMade(self):
self.transport.write("An apple a day keeps the doctor away/r/n")
self.transport.loseConnection()
在本节,我将要讲解怎样简单的去测试你的protocol。(想知道如何写出一个好的twisted的服务器,请看 Writing Plug-Ins for Twisted),这里有一个代码将运行我们上面谈论的QOTD服务器:
PythonCode:
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
class QOTD(Protocol):
def connectionMade(self):
self.transport.write("An apple a day keeps the doctor away/r/n")
self.transport.loseConnection()
# Next lines are magic:
factory = Factory()
factory.protocol = QOTD
# 8007 is the port you want to run under. Choose something >1024
reactor.listenTCP(8007, factory)
reactor.run()
from twisted.protocols.basic import LineReceiver
class Answer(LineReceiver):
answers = {'How are you?': 'Fine', None : "I don't know what you mean"}
def lineReceived(self, line):
if self.answers.has_key(line):
self.sendLine(self.answers[line])
else:
self.sendLine(self.answers[None])
注意:界定符不是命令行的一部分 其他也有一些不流行的协议依然存在,比如netstring based 和 a prefixed-message-length
class QOTD(Protocol):
def connectionMade(self):
self.transport.write(self.factory.quote+'/r/n')
self.transport.loseConnection()
def makeQOTDFactory(quote=None):
factory = Factory()
factory.protocol = QOTD
factory.quote = quote or 'An apple a day keeps the doctor away'return factory
from twisted.internet.protocol import Factory, Protocol
from twisted.internet import reactor
class QOTD(Protocol):
def connectionMade(self):
self.transport.write(self.factory.quote+'/r/n')
self.transport.loseConnection()
class QOTDFactory(Factory):
protocol = QOTD
def __init__(self, quote=None):
self.quote = quote or 'An apple a day keeps the doctor away'
reactor.listenTCP(8007, QOTDFactory("configurable quote"))
reactor.run()
就是最后两句代码,还需要去理解。 listenTCP是一个将Factory连接到网络的方法,他使用了reactor的接口,让许多不同的循环处理网络代码,而不需要修改的 最终用户代码,就像这样。如前面所说,如果你想要写一个好的twisted服务器,而不是仅仅的20行,那么你需要使用 the Application object.