2

我正在评估 PyAMF 以取代我们当前的 PHP (ugh) AMF 服务框架,但我无法找到一个关键信息,可以让我提供一个引人注目的用例来进行转换:

现在,只需将 .php 文件放入文件系统即可部署新的 PHP AMF 服务;下次访问它们时,新服务就会发挥作用。删除服务就像删除提供它的 .php 文件一样简单,更新它也相应简单。我需要 PyAMF 提供同样易于部署的功能。如果我们必须重写我们的安装程序来部署这些服务,那将是一个失败者。

所以,我需要知道的是,PyAMF 是否可以通过文件系统支持新服务发现,它是否可以通过相同的方式支持服务升级和删除,如果是,那么设置它的最佳方法是什么?

我对各种服务器选项持开放态度;我可以很容易地安装chermpy、django,任何安装和运行的东西,甚至——稍微猛烈一点——有mod_python或mod_wsgi可用。

4

2 回答 2

2

web2py 包括 pyamf 支持。它的工作方式是你创建像

def add(a,b): return a+b

然后你用 @service.amfrpc3('domain') 装饰它们

@service.amfrpc3('domain')
def add(a,b): return a+b

您无需重新启动 Web 服务器或执行任何其他操作。您只需在控制器文件(定义服务的文件)中添加和删除函数,服务就会变为可用或删除。您还可以使用多个装饰器使用其他协议(xmlrpc、jsonrpc、rss、csv、xml、json)提供相同的功能。

@service.xmlrpc
@service.jsonrpc
@service.amfrpc3('domain')
def add(a,b): return a+b

您不需要实例化网关(与其他框架一样。所有装饰功能都通过您不需要编写的单个操作公开,因为它已经在脚手架应用程序中(由 web2py 为您创建):

def call(): return service()

这些函数可以访问 web2py 数据库抽象层 (DAL) 和(有一些限制)web2py 身份验证机制。

您可以使用 shell(emacs/vi/etc)编辑包含该功能的控制器,但您也可以使用基于 web2py Web 的 IDE(称为“admin”)并使用浏览器添加服务。

Web2py 包含一个票务系统,因此很容易调试 Web 服务。任何服务器端错误都会导致票证。管理员中有一个网页列出了所有票证。您单击一个,它会显示导致问题的代码和完整的回溯。

您可以导入和使用任何第三方 python 模块。您必须预先安装 pyamf。

这在本书的第 9 章中有详细记录:

http://web2py.com/book/default/section/9/2

web2py 应用程序非常容易部署。一种方法是使用管理员点击。另一种方法是简单地将文件从一台机器复制到另一台机器。没有元数据,没有安装程序(甚至 web2py 本身也没有),没有设置,没有配置文件。后一个过程在这里有所描述:

http://gluonframework.wordpress.com/2010/03/02/shell-only-web2py/

web2py 基于 WSGI。它与您能想到的任何 Web 服务器一起运行(apache+mod_wsgi/mod_python/mod_proxy;lighttpd/cheorkeey/ngnix+fcgi/wsgi.py;cherrypy;等)。此处详细记录了一些选项:

http://www.web2py.com/book/default/section/11/0

其他选项可以在http://web2pyslices.com上找到

web2py还自带了自己的web服务器Rocket,支持https,速度非常快。web2py 代码也可以部署在 Google App Engine 上。

检查 web2py google 组上的活动。

于 2010-04-22T05:05:40.180 回答
0

我将 PyAMF 与 Django 一起使用。一个可能的解决方案大致如下所示:

  1. 创建一个包含所有不同 AMF 服务 py 文件的 python 模块
  2. 创建一个包装 DjangoGateway 的视图并初始化所有服务。在此视图中,您可以执行以下操作:
    • reload()你的服务模块
    • 根据文件名({SERVICE_NAME: SERVICE_INSTANCE})填充字典
    • 用这个字典实例化DjangoGateway并让它处理传入的请求。

这是一个骇人听闻的解决方案,因为您只能部署文件而无需任何其他操作,例如重新启动服务器。

于 2010-04-21T15:57:31.257 回答