ice rpc java,使用ICE实现RPC简单示例01

看一眼下面的框架,你就会发现,ICE框架其实与CORBA很相似。但ICE更加的简洁高效,并增加了很多现代框架的特性。同时,其开发组件更加易用,不需每种语言单独下载,学习成本相对较低。

ff862519d09f1a48d5fce381e4f9693b.gif

ICE是典型CS架构,与CORBA相同,ICE帮我们处理的底层的网络通信及服务定位,我们只需要告诉ICE服务在哪里,需要哪个服务,调用参数是什么,然后就坐等处理结果就好咯。

使用ICE的时候,首先要先下载ICE的开发包,下载后直接解压就好了。

ICE下载地址

在使用ICE的时候,首先要用Slice语言,定义一个接口描述文件,比如我自己写了一个很简单的接口。

JustATest.ice

module JustATest

{

interface iIceTest

{

string SayHelloTo(string s);

int Add(int a, int b);

};

};

然后用对应语言的转化工具,将接口描述文件,转化为对应语言。

#设置环境变量

set ICE_HOME=C:\NeoArch\ZeroC\Ice-3.6.1

set PATH=%ICE_HOME%\bin;%PATH%

#转化为java

slice2java JustATest.ice

#转化为csharp

slice2cs JustATest.ice

那ICE的Client端,是如何找到Server,并告诉Server要调用哪个服务的呢?

//首先,Server在启动的时候,要指定Adapter的名称与端口

ic.createObjectAdapterWithEndpoints("NeoTestAdapter", "default -p 1900");

//然后,在Server端的Adapter上,要做一个类似于将服务名称与服务对象绑定的动作

adapter.add(obj,Ice.Util.stringToIdentity("NeoICETest"));

//当Client启动的时候,要指定端口及服务名称,这样就找到了

Ice.ObjectPrx obj = ic.stringToProxy("NeoICETest:default -p 1900");

那如果两个服务同名,只是端口不一致咋办呢?

你可以发现,无论是Client还是Server,无论是C#还是Java,都有类似的代码,你懂的。

//C#

public static readonly string[] ids__ =

{

"::Ice::Object",

"::JustATest::iIceTest"

};

//java

public static final String[] __ids =

{

"::Ice::Object",

"::JustATest::iIceTest"

};

在client段调用的时候,有checkedCast和uncheckedCast两种转换方式,说白了,checkedCast会先校验接口是否匹配,而uncheckedCast会直接强制转换不做任何校验。可以根据实际情况选用咯。

Share the post "使用ICE实现RPC简单示例01"

  • 0
    点赞
  • 0
    收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值