进alibaba以来一直听说我们有部分产品之间的通讯是采用ICE架构的,它是一种简洁的分布式网络中间件。但是由于项目紧张一直没有时间研究,这两天终于有时间研究一把(而且据老大说我们今年要对旺旺提供给内部的接口进行测试,该部分的设计又是采用ICE通讯的),所以也是不得已不学习的。为此查了好多资料,包括老唐的博客。http://blog.csdn.net/sfd。
终于也弄明白了是怎么回事,并且实战了一把,也把自己学习的历程总结一下,方便后来者。
首先,必须明白ICE是作为一种中间件语言,那么它必须是标准的,简易的。事实也是如此,如下例子,在ICE文档中只需要申明module名称,接口名称,方法名称。
01 #ifndef SIMPLE_ICE 02 #define SIMPLE_ICE 03 04 module Demo { 05 interface Printer 06 { 07 void printString(string s); 08 }; 09 }; 10 #endif |
其次,支持不同语言之间通讯的。也就是说服务器端拿着ICE的文档去编写服务器端的代码,它可能采取c++也可能采用C#也可能采用java来编写服务器端的代码。而客户端用户拿着ICE的文档,去编写客户端的代码。而他们编译出来的代码是可以相互通信的,因为他们采用了同一个桥梁ICE。下面将通过两个个例子说明
l 如何编写一个C#的ICE服务和一个C#的客户端进行通讯
l 如何编写一个C#的ICE服务和一个java的客户端进行通讯。
例子一:快速搭建一个C#的ICE服务和一个C#的客户端代码。
1. 首先需要下载ice的安装包,地址如下:http://www.zeroc.com/download.html
本例采用vs2005,故下载http://www.zeroc.com/download/Ice/3.3/Ice-3.3.0-VC80.msi
2. 在下载安装完之后,设置系统的环境变量,Path = Path+ ;安装目录/bin
3. 仔细阅读安装目录中的readme,其中对于每一种语言如何编写服务器端和客户端代码都有描述。
4. 打开vs2005编辑器,加载C#的demo。目录=安装目录/democs/demo.sln。
5. 在demo的solution中有很多工程,我们选择Printer来进行实验。编译PrinterS,PrinterC。
6. 打开一个cmd窗体,cd到工程目录,运行server.exe.启动ICE服务。
7. 再打开一个cmd窗体,cd到工程目录,允许client.exe,