如何用python开发Zeroc Ice应用
zeroc ice简介
zeroc ice(internet communications engine ,互联网通信引擎)是目前功能比较强大和完善的rpc框架,支持跨平台、跨语言调用。它非常灵活,可以通过tcp、udp、ssl/tsl或websocket连接,支持同步、异步调用,以及服务器和客户端之间的双向连接。zeroc ice的效率非常高,它使用一种高效的二进制协议,对带宽的消耗比较小。甚至对于通过卫星的rpc调用,zeroc ice还可以对数据流进一步压缩。另外zeroc ice还可以在不解包的情况下转发调用请求,省去普通转发时的解包、重新压包的时间。
zeroc ice的应用还可以部署在icegrid上,实现网格计算,即客户端调用时不必指定目标主机,由ice负责查找;服务端也可以在调用时才开启,动态加载;同样的服务也可以部署多个,实现高可用。
实验简介
zeroc ice支持跨语言rpc调用,包括c++、c#、java、javascript、python、objective-c、ruby、php、vb等。本次实验采用python(pyhon 2.7以上,或者python 3都可以)。实验的内容是在icegrid上部署一个简单的服务器,当客户端调用时输出指定内容,并返回一个字符串。实验步骤如下:
- 安装zeroc ice
- 开发服务端和客户端程序
- 部署到icegrid
- 客户端调用
环境准备
本次实验采用的操作系统是ubuntu 14.04。如果使用其他操作系统,可以根据zeroc ice的文档相应调整。
安装zeroc ice
如果系统中没有安装zeroc ice,并且ubuntu的软件源中也没有zeroc ice,可以按照下面的步骤安装。
安装之后系统中就有了slice2cpp、slice2java等sliece(zeroc ice定义的接口描述语言,idl)文件到相应语言的转换程序,以及icegrid、iceregistry、icegridadmin等程序。如果缺少目标语言的工具(例如slice2py)或开发包,还需要特别安装。
安装zeroc ice的python开发包
当然在这一步之前应当首先安装python和pip(python的依赖管理工具),此处略。zeroc ice的python开发包(或者模块)叫zeroc-ice,可以使用pip安装。
安装过程中可能出现缺少某些c/c++头文件的问题,例如缺少python.h、openssl/ssl.h、bzlib.h,这些都是因为没有安装相应的开发包。可以通过如下的命令解决:
开发server和client
下面即是真正的服务端和客户端开发。开发过程通常是:
- 使用slice语言定义语言无关的接口文件
- 转换成指定语言的接口文件
- 根据接口文件开发服务端和客户端程序
- 书写服务端和客户端的配置文件
使用slice语言定义接口
生成指定语言的接口文件
本次开发采用的语言是python,所以使用
slice2py printer.ice
其他语言可以依此类推,例如slice2java,slice2cpp。
命令执行成功,可以看到在目标目录中生成了一个printer_ice.py文件,以及一个demo目录。demo是slice接口文件中定义的module名称。
编写服务器
server.cfg内容如下:
其中tcp的意思通过tcp协议调用,服务器监听来自tcp协议的连接请求。
编写客户端
客户端的配置文件如下:
客户端直连服务端
上述程序开发完毕之后不用部署到icegrid就可以直接运行,配置文件是用来在icegrid上定位和连接服务。此时可以一边运行服务端,一边运行客户端,检验一下它们的功能。
python server.py
运行之后可以看到进程并没有结束,一直在等待连接。然后另起一个终端,运行客户端程序。
python client.py
运行之后可以看到服务端和客户端窗口的输出。
部署到icegrid
icegrid是zeroc ice的云计算解决方案。它可以将各种服务端部署在多台机器上,并为客户端调用提供服务定位、服务激活、负载均衡、故障转移等服务。客户端只要连接到指定的服务注册中心,就可以根据服务名称(这里是simpleprinter),以及连接协议(endpoints,这里是tcp)就可以找到相应的服务。服务在注册时也不必处在运行状态,可以由icegrid根据调用请求,自动启动。
配置注册中心
registry.cfg(服务注册中心的配置文件)
注意:手工创建文件中的路径。
配置节点
节点是服务所在的机器。在实际生产环境中,服务注册中心也可以运行在其中某个节点上。
node1.cfg(服务所在节点的配置文件)
注意:手工创建上述文件中提到的路径。其中服务端程序的输出会保存在ouput指向路径的*.out文件中。
应用描述文件
应用描述文件用来描述服务端程序在icegrid中的部署情况。包括应用的名称、服务程序的路径、执行参数等等。
app.xml
启动icegrid
1.启动icegrid注册中心
icegridregistry --ice.config=registry.cfg
2.启动某个节点
icegridnode --ice.config=node1.cfg
3.启动节点上的应用管理程序, 并添加应用
icegridadmin --ice.config=node1.cfg
application add app.xml
4.查看已经添加的应用
application describe printerapplication
5.启动各节点上的应用服务
icegridgui
6.运行客户端程序
python client.py
实验总结
此次实验实现了在icegrid上部署服务程序,客户端通过icegrid的服务注册中心调用该服务。实验中服务端和客户端使用的都是python,有兴趣的同学也可以分别使用不同的语言开发服务端和客户端,尝试一下zeroc ice的跨语言rpc调用。
本次实验就到这里,有关zeroc ice的其他内容请关注后续的课程。
以上就是如何用python开发zeroc ice应用的详细内容,更多关于python开发zeroc ice应用的资料请关注其它相关文章!