twisted插件以项目目录结构的形式进行组织,结构如下:
echoproject
|
-twisted
|
-plugins
|
插件列表
|
协议工厂
协议工厂
.....
使用twistd.py在echoproject根目录上运行,则可以直接列出echo_plugin.py中的插件信息。在命令行输入twistd.py --help,如下:
可以看到左侧命令行窗口显示的echo TCP-based echo server服务器。根据twistd.py echo --help查看该插件的帮助,便可以直接使用该插件了。
echo.py
from twisted.internet import reactor
from twisted.internet.protocol import Protocol, Factory
class Echo(Protocol):
def dataReceived(self, data):
print '->Receievd: ',data
self.transport.write(data)
class EchoFactory(Factory):
protocol = Echo
echo_plugin.py
from twisted.application.service import IServiceMaker
from twisted.application import internet
from twisted.plugin import IPlugin
from twisted.python import usage
from echo import EchoFactory
from zope.interface import implements
class Options(usage.Options):
optParameters = [['port','p', 8000, 'Port number']]
class EchoServiceMaker(object):
implements(IServiceMaker, IPlugin)
#IPlugin informations
tapname='echo'
description = 'TCP-based echo server'
options = Options
#IServiceMaker services
def makeService(self, options):
'''
Construct a TCPServer from a factory defined in echo.py
'''
return internet.TCPServer(int(options['port']), EchoFactory())
serviceMaker = EchoServiceMaker()
需要有一个类从usage.Options派生,需要有一个类从object派生,并实现IPlugin和IServiceMaker的接口。并在该类中实现makeService函数返回服务。
定义一个变量serviceMaker即可生成一个twisted的插件。由twisted的工具twistd.py来启动该插件。