Twisted应用
Twisted中的Application是一个代表整个Twisted应用的最顶层服务,其中实现了IService
、IServiceCollection
等接口。如果使用Twisted提供的twistd
脚本来实现守护进程,则必须要用到这个类。Twisted已经提供了一个常用的Application实现,大部分情况下我们不必自行完成Applicaition实现。
IService
接口定义了一个可以启动和停止的命名服务,其中有两个方法比较关键:startService()
和stopService()
,分别用于启动和停止服务。IService
中有两个必需的属性:name
用来对服务进行命名,running
用来表示服务当前的运行状态。IService
中还提供了一个setServiceParent()
方法,用来将服务添加到一个IServiceCollection
对象中,使得服务可以被更加容易的管理。
twistd
脚本最关心的就是Application,所以针对以下示例:
top_service = service.MultiService()
content_service = ContentService(content_source) # 自定义内容服务
content_service.setServiceParent(top_service)
factory = ContentServiceFactory(content_service) # ContentServiceFactory是自定义的用于建立服务的工厂类
tcp_service = internet.TCPServer(port, factory, iterface=iface) # 建立TCP服务
tcp_service.setServiceParent(top_service)
application = service.Application('Demo')
top_service.setServiceParent(application)
可以使用命令:twistd --nodaemon --python app.py
来启动。
IService
接口允许我们将不同的任务分开定义,形成不同的服务。而在实际项目中,服务之间往往是紧密联系的。Twisted提供了一个MultiService
类来将多个服务组织在一起作为一个服务存在。由于MultiService
实现了IServiceCollection
,所以只需要调用.setServiceParent()
将MultiService
实例设为服务的父服务即可将服务添加到MultiService
中。具体用法可参考上面的示例。