python做web调用ICE服务

python做web调用ICE服务
(以前写的一篇文章)

最近一直在关注ICE( http://www.zeroc.com/),不得不说其功能的强大,我主要看重几个点:

1.多语言支持,C++,Java,C#,Objective-C,Python,Ruby,PHP。

2.高级RPC,同时支持同步调用和异步调用,由于RPC是在ICE框架环境下运行的,所以稳定性和可靠性可以保证。在服务端内部使用会非常方便,比如将ICE前置在数据库之上,所有对数据库的访问方式就成了RPC

3.对分布式系统的支持-ICEGrid,涵盖了负载均衡,位置服务,计算节点“需要时启动”等众多特性,更多内容可以参考帮助文档(http://www.zeroc.com/doc/index.html)。简单提一下“需要时启动”,就是说某个client调用了节点Node1,如果Node1此时没有启动,则ICE负责将他启动,这个过程对client来说是透明的。 假如计算节点的逻辑上存在bug,触发bug会引起节点退出。通常的做法是自己写一些监控程序,如果发现节点不在了重启动,利用ICEGrid后,就避免了这个问题

4.提供了基于发布-订阅机制的消息组建ICEStorm

  上面只是我关注的几点,更多的功能特性,请参考帮助文档!      下面以python作为web的开发后端,来调用python写的ICE服务,注意ICE服务可以是其他语言编写的,这个例子是修改的ICE提供的demo(D:\libs\Ice-3.3.1\demopy\book\printer),主要的功能是

       (1)client通过浏览器打开某个python页面

         (2) python页面调用ICE基础服务

       (3)python页面将结果通过浏览器返回给client

一。接口文件Printer.ice内容如下:

#ifndef SIMPLE_ICE
#define SIMPLE_ICE

module Demo
{

    interface Printer
    {
        string echo(string s);
    };

};

#endif

二。Server.py内容如下:

import sys,traceback,Ice

Ice.loadSlice(’Printer.ice’)
import Demo

class PrinterI(Demo.Printer):
    def echo(self, s, current=None):
        print s
        return s

status = 0
ice = None
try:
    ic = Ice.initialize(sys.argv)
    adapter = ic.createObjectAdapterWithEndpoints(”SimplePrinterAdapter”, “default -p 10000″)
    object = PrinterI()
    adapter.add(object, ic.stringToIdentity(”SimplePrinter”))
    adapter.activate()
    ic.waitForShutdown()
except:
    traceback.print_exc()
    status = 1

if ic:
    # Clean up
    try:
        ic.destroy()
    except:
        traceback.print_exec()
        status = 1

sys.exit(status)

三。echo.psp内容如下:

<%
import sys, traceback, Ice

import Demo

status = 0
ice = None
try:
    ic = Ice.initialize(sys.argv)
    base = ic.stringToProxy(”SimplePrinter:default -p 10000″)
    printer = Demo.PrinterPrx.checkedCast(base)
    if not printer:
        raise RuntimeError(”Invalid proxy”)

    sEcho = printer.echo(”Hello ICE!”)
    print sEcho
except:
    traceback.print_exc()
    status = 1

if ic:
    # Clean up
    try:
        ic.destroy()
    except:
        traceback.print_exc()
        status = 1

%>
<%=sEcho%>

四。运行过程:

1.启动ICE服务:python Server.py

2.启动Apache

3.浏览器中输入http://localhost:8080/echo.psp

4.此时浏览器中显示:Hello ICE!

你可能感兴趣的:(python做web调用ICE服务)