Zope 3应用的扭曲集成
zope.app.twisted的Python项目详细描述
这个包将twisted http和ftp服务器集成到zope 3中 应用程序设置。它还定义了经典zope 3的脚本框架 申请。
详细文档
Zope 3应用服务器支持
此包负责初始化和启动 将提供对zope 3应用程序的访问。这个包裹很重 扭曲的dependent,尽管有些片段可以重复使用来启动zope 3 其他环境中的应用程序服务器。
服务器类型
zope 3需要支持多种服务器类型——http、ftp、http和postmortem 调试等。所有这些都注册为IServerType实用程序 ZCML公司。这使得开发人员可以轻松地为 佐佩3号。
ServerType是特定于 标准扭曲服务器..ServerType的构造函数需要三个 参数:将创建扭曲的IServerFactory对象的工厂 以及将服务器绑定到的默认端口和IP。
factory参数应该是可调用的,需要一个参数zodb 实例。这取决于工厂,在 服务器和应用程序:
>>> class TwistedServerFactoryStub(object): ... def doStart(self): pass>>> def factory(db): ... print 'ZODB: %s' %db ... return TwistedServerFactoryStub()
对于ServerType的另外两个构造函数参数,defaultPort 参数指定服务器的默认TCP端口号。这个 defaultIP参数指定监听的网络接口。你 可以指定网络接口IP地址,如果需要,可以指定空字符串 监听所有接口。
我们现在准备好实例化服务器类型:
>>> from zope.app.twisted.server import ServerType >>> st = ServerType(factory, defaultPort=8080)
让我们确保它真正实现了承诺的接口:
>>> from zope.interface.verify import verifyObject >>> from zope.app.twisted.interfaces import IServerType >>> verifyObject(IServerType, st) True
然后将服务器类型注册为命名实用程序。使用这些实用程序 在解释zope.conf的<server>节以创建 侦听特定端口的服务器。
当您使用 服务器类型,您需要告诉它一个标识名和一个zodb数据库 反对。IP地址、端口和backlog计数可以选择性地传递给 方法。
>>> db = 'my database' >>> server = st.create('Example-HTTP', db, port=0) ZODB: my database >>> server #doctest:+ELLIPSIS <zope.app.twisted.server.ZopeTCPServer instance at ...>
正如您所看到的,服务器类型创建了一个特定于zope的tcp服务器,它是 只是一个标准的twisted.internet.TCPServer,它在 启动。
>>> server.startService() >>> print log.getvalue() -- Example-HTTP Server started. Hostname: localhost Port: 0
当然,您可以创建同一服务器类型的多个实例,并且 将它们绑定到不同的端口。
>>> server2 = st.create('Example-HTTP-2', db, port=0) ZODB: my database>>> server2.startService() >>> print log.getvalue() -- Example-HTTP Server started. Hostname: localhost Port: 0 -- Example-HTTP-2 Server started. Hostname: localhost Port: 0
一种特殊的服务器类型是ssl服务器类型;它需要一些 附加信息(私钥路径、证书路径和tls标志) 启动服务器。只有安装了openssl,安装程序才能工作:
# >>> from zope.app.twisted.server import SSLServerType # >>> ssl_st = SSLServerType(factory, defaultPort=8443) # # >>> ssl_server = ssl_st.create(‘Example-HTTPS’, db, # … ‘server.pem’, ‘server.pem’) # ZODB: my database # >>> ssl_server #doctest:+ELLIPSIS # <zope.app.twisted.server.ZopeSSLServer instance at …>
服务器工厂
现在,我们当然不会在 Python。相反,我们使用zconfig来设置服务器。不幸的是 意味着我们需要另一个抽象层来设置 服务器。基于zconfig的配置代码创建所谓的ServerFactory 和SSLServerFactory对象,然后使用服务器类型创建 服务器。
>>> from zope.interface import implements >>> from zope.app.twisted.interfaces import IServerType >>> class MyServerType: ... implements(IServerType) ... def create(self, name, db, ... port='unknown', ip='', backlog=50): ... if not ip: ... ip = '*' # listen on all interfaces ... return ('%s server on %s:%d, registered with %s, backlog %d' ... % (name, ip, port, db, backlog))>>> from zope.app.testing import ztapi >>> ztapi.provideUtility(IServerType, MyServerType(), name='HTTP') >>> ztapi.provideUtility(IServerType, MyServerType(), name='FTP')
ServerFactory用于挂接到zconfig并创建服务器实例 在zope.conf中指定。它获取包含设置的节参数 在zconfig<server>节中指定。
>>> class ServerSectionStub: ... type = 'HTTP' ... address = ('', 8080) ... backlog = 30 >>> my_section = ServerSectionStub()>>> from zope.app.twisted.server import ServerFactory >>> sf = ServerFactory(my_section)
服务器工厂对象知道如何在给定zodb数据库的情况下创建服务器 反对。名称是类型、IP和端口的组合,因此 代码可以区分不同的http服务器。
>>> db = 'my db' >>> print sf.create(db) HTTP:localhost:8080 server on *:8080, registered with my db, backlog 30
它可以创建多个,使用不同的端口。
>>> my_section.address = ('', 8081) >>> sf = ServerFactory(my_section) >>> print sf.create(db) HTTP:localhost:8081 server on *:8081, registered with my db, backlog 30
这些设置实际上也应该适用于ftp。
>>> my_section.type = 'FTP' >>> my_section.address = ('127.0.0.1', 8021) >>> sf = ServerFactory(my_section) >>> print sf.create(db) FTP:127.0.0.1:8021 server on 127.0.0.1:8021, registered with my db, backlog 30
变化
3.5.0(2009-07-24)
- 更新测试以使用最新的包。
3.4.2(2009-01-27)
- 修复测试。删除未使用的代码。 <里>将zope.testbrowser添加到zeo测试的测试依赖项中。
- 删除对zodb3不需要的依赖项。
- 移除对zope.app.zapi的依赖,用direct替换它的用法 进口。
- 在软件包主页中将“cheeseshop”更改为“pypi”。
3.4.1(2008-02-02)
- 请求中冲突错误的599错误修复 见:http://mail.zope.org/pipermail/zope-dev/2008-January/030844.html
3.4.0(2007-10-27)
- 独立于主zope树的初始发布。