Ice不介绍了,http://www.zeroc.com/
Ruby不介绍了。
来,我试试啊,步骤我会清楚的记录下来,
一来肯定让不会的人学会,
二来我怕我自己忘了,这两天大脑缺氧,只能记住三天内的事情。。。。。。
下载Ice-3.3.0-VC60.msi
http://www.zeroc.com/download/Ice/3.3/Ice-3.3.0-VC60.msi
ICE从3.1.1开始就支持Ruby了,动态语言还支持Python、php。
下载后安装,略过。
安装好后请打开安装目录,仔细阅读《README.txt》,如果你觉得阅读英文太累又不想走弯路,那就请你仔细阅读本博客。
首先,Ice3.3.0支持的Ruby是1.8.6,请确认。
其次,README.txt中说道:
引用
“You also need to add the Ice bin directory to your PATH, for example:
set PATH=<Ice installation root directory>\bin;%PATH%
Finally, set RUBYLIB so that the Ruby interpreter is able to load
the Ice extension:
set RUBYLIB=<Ice installation root directory>\ruby;%RUBYLIB%”
所以请在你的环境变量中设置/增加如上两项,别写错!!!
环境变量搞定了么?搞定了请你掏出irb试试,
win+r->cmd->irb:
require 'rubygems'
require 'Ice'
这两个require执行完后如果都是成功,那恭喜你,Ice的ruby工作环境已经搞定。
Ice怎么工作的我也不说了,服务端接口开发好后,用.ice文件描述一下接口和数据格式,然后将这个.ice文件给客户端,客户端可以用slice2****去转换成相应语言的接口文件,加载进去就可以使用和服务器端约定好的接口和数据了。
这篇文章主要是说客户端怎么使用ruby调用服务器端的接口,所以服务器端怎么实现我们就不管了,我把服务器端的主要代码给大家看一眼大家就明白了,大家都比我聪明的哦!
下面是服务端的主要代码,
/*这段代码是启动Ice的,都是套路的东西*/
Ice::ObjectAdapterPtr adapter = ic->createObjectAdapterWithEndpoints("WGSrv","default -p 7788");
//服务器端口是7788
Ice::ObjectPtr object = new CTestIceImpl();
adapter->add(object, ic->stringToIdentity("WGInterfaceAgentId"));
//这句重要,约定了一个身份证一样的东西,客户端用的,用来判断客户端调用的是服务器的哪个ice接口。
adapter->activate();
std::cout << "now server start successfully." << std::endl;
ic->waitForShutdown();
/*这段代码是服务器端接口的实现,
*我这里选择了一个ping的接口给大家看,
*我们可以看到这个ping除了向终端(服务器端)输出"ping successfully."这个字符串之外,
*就是返回个0,之外就没做什么,很简单。
*/
int ping(const Ice::Current& = Ice::Current())
{
std::cout << "ping successfully." << std::endl;
return 0;
}
上面都是服务器的东西,下面是Ruby访问这个接口的方法:
<<COMMENT
这里面的东西几乎全部是套路,需要实现的代码请放到别的地方,需要的时候加载进来。
COMMENT
require 'Ice'
Ice::loadSlice('testice.ice')#服务端给你的.ice在这里用到了!
status = 0
ic = nil
begin
ic = Ice::initialize(ARGV)
base = ic.stringToProxy("WGInterfaceAgentId:default -p 7788 -h 10.2.226.8")
#上面这句,请注意服务器端对应的一句之一“adapter->add(object, ic->stringToIdentity("WGInterfaceAgentId"));”
#上面我们提到过"WGInterfaceAgentId"这个字符串是用来辨别目的地接口的,现在用到了哦。
pinger = WG::WGTestIcePrx::checkedCast(base)
if not pinger
raise "Invalid proxy"
end
pinger.ping()#只有这句最有用,其它的都是套路。
rescue
puts $!
puts $!.backtrace.join("\n")
status = 1
end
if ic
# Clean up
begin
ic.destroy()
rescue
puts $!
puts $!.backtrace.join("\n")
status = 1
end
end
exit(status)
执行一下,成功。
我没仔细研究过ICE,以前也从没用过这东西,这是第一次用,看了下ZeroC的文档,请教了朋友,才完成调用,但还有个问题我不明白,Ice提供了一个工具是slice2****,这个工具对于静态语言来说是用来转换.ice文件到对方语言的,但我用动态语言比如Ruby调用Ice接口的时候,我发现即便我把这个slice2rb生成的文件文件删掉也无所谓,照样调用通过,我想这可能是利用了动态语言无需声明定义的特点吧,看来用Ruby调用Ice接口实在是太方便了!!
临了,要感谢我的哥们:王冠同学,Ice服务端的那个简单接口是他写的。
写完了。
分享到:
- 2008-12-31 16:08
- 浏览 1089
- 评论(0)
- 论坛回复 / 浏览 (0 / 2368)
- 查看更多
相关推荐
标题中的“ice最简单实现 ruby调用ice接口”是指在Ruby编程语言中使用ICE(Internet Communication Engine)框架来实现远程方法调用(RPC)。ICE是由ZeroC开发的一种跨平台、高性能的中间件,它允许不同语言的应用...
Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门与实践 Ruby编程语言入门...
Ruby 和 Redis 接口是开发过程中非常重要的工具,它们允许Ruby程序员充分利用Redis的高效数据存储和处理能力。Redis是一款开源的、基于键值对的数据结构存储系统,它以内存为运行基础,支持多种数据结构,如字符串、...
在压缩包内的"ruby和redis接口"可能包含了实现这一功能的具体代码,比如使用`redis`库连接Redis节点,执行`CLUSTER MEET`命令来建立节点间的连接,`CLUSTER ADDSLOTS`来分配槽位,以及`CLUSTER REPLICATE`命令来设置...
这个压缩包“ruby和redis接口.zip”很可能包含了关于如何在Ruby项目中配置和使用Redis的相关示例或教程。 首先,安装`redis` gem是使用Ruby和Redis的第一步。在终端中运行以下命令: ```bash gem install redis ``...
Ice 是一种针对客户端和服务器进行通信的面向对象的中间件平台。Ice 为构建面向对象的客户-服务器应用提供了工具、API 和库支持。客户和服务器通信双方可以用不同的编程...本代码为ice同步调用和异步调用实例代码。
12. **测试驱动开发(TDD)和持续集成**:Ruby社区重视测试,因此学习如何使用Rspec等测试工具,以及如何实施TDD和持续集成实践也是重要的一环。 “Ruby从入门到精通(1).pdf”这本书很可能会涵盖以上所有主题,并...
forecast-ruby, 用于从预测天气API中检索数据的ruby gem forecast_ioruby 中的forecast.io API包装器。安装gem install forecast_io或者你的Gemfilegem 'forecast_io'用法确保你需要库。requir
在Ruby-OurPC中,你将能够使用protobuf定义服务接口,然后在客户端和服务器之间进行通信。protobuf定义的接口允许你在不同的语言之间轻松地交换数据,增强了跨平台应用的可移植性。 Ruby-OurPC的实现可能包括以下...
总的来说,这份Ruby入门教程应该能帮助初学者建立起对Ruby语言的全面认识,从基础语法到高级特性,再到实际开发中的工具使用,为进入Ruby世界提供了一条清晰的学习路径。通过深入学习和实践,读者将能够运用Ruby进行...
1. **Ruby语言基础**:首先,你需要了解Ruby的基础语法,包括变量、数据类型(如字符串、整数、浮点数、数组、哈希)、控制结构(如条件语句if/else,循环for、while、each)、函数定义与调用、类和对象等概念。...
总之,无论你是对编程感兴趣的新手,还是想扩展技能树的开发者,这份“Ruby入门教程中文PDF 附实例”都将是你宝贵的参考资料。通过学习,你不仅可以掌握Ruby的基础知识,还能体验到编程的乐趣和效率。
PyCall:从Ruby语言中调用Python函数该库提供了直接从Ruby语言中调用Python并与之进行部分互操作的功能。 您可以在PyCall中导入任意Python模块:从Ruby语言调用Python函数该库提供了直接从Ruby语言调用Python并与之...
"The Ruby Way.chm"则可能是对经典的"The Ruby Way"一书的中文版,这本书通常深入探讨Ruby的最佳实践和高级特性,比如元编程、反射、自定义方法调用、C扩展等。它不仅教导如何编写Ruby代码,还强调了Ruby的哲学和...
"Ruby从入门到精通"的教程旨在帮助新手快速掌握这门语言的核心概念和实际应用。Ruby由日本人松本行弘在1993年创建,它的设计目标是让编程更加愉悦,同时也更注重代码的可读性和表达性。 1. **基础概念**: - 变量...
Ruby快速入门(30分钟入门) - Ruby教程资源的简介 欢迎来到“Ruby快速入门(30分钟入门)” — 一个为初学者精心设计的Ruby编程之旅。本教程旨在通过紧凑、高效的课程结构,让你在短短半小时内掌握Ruby编程语言的...
本教程将带你从入门到精通,深入理解Ruby语言的各个方面。 ### 第一部分:Ruby语言基础 #### §1.1 Ruby的历史 Ruby的诞生源自松本行弘对现有编程语言的不满,他希望创造一种既具有动态类型系统的灵活性,又能体现...
Ruby-PyCall是一个非常有用的库,它允许Ruby程序员无缝地调用Python的函数和模块,极大地扩展了Ruby的生态系统。这个库使得两个语言之间的交互变得简单而高效,特别是在需要利用Python的强大科学计算或数据处理能力...
《Ruby语言入门教程v1.0》是一份详尽的指南,旨在为初学者提供一个易于理解的Ruby语言学习路径。下面,我们将深入探讨该教程所涵盖的关键知识点,特别是其标题和描述中提及的核心概念。 ### 1. 编程语言的发展简史 ...