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的配置代码创建所谓的ServerFactorySSLServerFactory对象,然后使用服务器类型创建 服务器。

>>> 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)

3.4.0(2007-10-27)

  • 独立于主zope树的初始发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我需要在一个数组中添加1000个介于1和100之间的整数及其出现次数,然后显示它们   如何在java中将两个不同的excel文件作为数据库连接到同一台服务器上?   java JSP编译错误令牌“throws”语法错误,应为throw   java如何使用Jetty HTTP客户端和MultiPartContentProvider上载BuffereImage?   具有多个方法对象的java测试类   在java中比较字符串和打印剩余字符时出现意外输出?   java设置JPanel的大小,当其中没有组件时   使用exoplayer播放m3u8文件的java   JSON中未添加Jackson@type的java Rest JSON   java如何为heroku创建procfile文件?   基于数组的java信息存储   sockets java。网SocketTimeoutException:在Tomcat下读取超时   安卓x的java问题。偏爱安卓工作室   java我的方法没有按预期运行   java如何通过单击单选按钮将值从表传递到servlet?   java无法获取instagram个人资料图片的完整大小