DRB以及Rinda技术详解 (正在编写中...)
来源:互联网 发布:暗黑3网络加速器 编辑:程序博客网 时间:2024/06/05 16:50
DRB (Distributed Ruby)是一个ruby的远程调用程序库,使用它,你可以在像调用一个本地的对象一样访问远程的一个对象。
下面的代码说明了如何使用drb。
# 服务器端
require 'drb'
class TestServer
def add(*args)
args.inject {|n,v| n + v}
end
end
server = TestServer.new
DRb.start_service('druby://localhost:9000', server)
DRb.thread.join # Don't exit just yet!
# 客户端
require 'drb'
DRb.start_service()
obj = DRbObject.new(nil, 'druby://localhost:9000')
# Now use obj
puts "Sum is: #{obj.add(1, 2, 3)}"
DRB的实现只有几百行代码。
java的JNI技术基于JavaSpaces技术,而JavaSpaces技术基于Linda,DRB的作者实现了
一个叫做Rinda的Ruby版的Linda。
Linda实现的是一种分布式进程间协作的情景。
Linda的基本操作对象是tuple.
tuple的读取标准可以是tuple的大小也可以是tuple中元素的内容匹配与否。
允许drb services/clients互相查找的是 RingServer.
rinda的一个示例代码:
######### rinda server
require 'drb/drb'
require 'rinda/tuplespace'
require 'rinda/ring'
DRb.start_service
tuple_space = Rinda::TupleSpace.new
ring_server = Rinda::RingServer.new tuple_space
while true
msg = gets
tuple_space.write [:message, msg]
end
######### rinda client
require 'drb/drb'
require 'rinda/tuplespace'
require 'rinda/ring'
DRb.start_service
tuple_space = Rinda::RingFinger.primary
while true
puts "message: " + tuple_space.take([:message, nil])[1]
end
问题:
1、但是多个client不能都取到tuple
2、另外一台机器上的client不能发现ringserver.
3、如果去掉take语句是可以取到消息的,但是新写入的tuple不能覆盖旧的tuple.
A RingServer allows a Rinda::TupleSpace to be located via UDP broadcasts.
可以解决这个问题了,用 RingServer,RingFinger的确可以靠 broadcast udp 包找到其他的
rinda service.但是要显式地给 drb service 绑定 uri.
下面的代码说明了如何使用drb。
# 服务器端
require 'drb'
class TestServer
def add(*args)
args.inject {|n,v| n + v}
end
end
server = TestServer.new
DRb.start_service('druby://localhost:9000', server)
DRb.thread.join # Don't exit just yet!
# 客户端
require 'drb'
DRb.start_service()
obj = DRbObject.new(nil, 'druby://localhost:9000')
# Now use obj
puts "Sum is: #{obj.add(1, 2, 3)}"
DRB的实现只有几百行代码。
java的JNI技术基于JavaSpaces技术,而JavaSpaces技术基于Linda,DRB的作者实现了
一个叫做Rinda的Ruby版的Linda。
Linda实现的是一种分布式进程间协作的情景。
Linda的基本操作对象是tuple.
tuple的读取标准可以是tuple的大小也可以是tuple中元素的内容匹配与否。
允许drb services/clients互相查找的是 RingServer.
rinda的一个示例代码:
######### rinda server
require 'drb/drb'
require 'rinda/tuplespace'
require 'rinda/ring'
DRb.start_service
tuple_space = Rinda::TupleSpace.new
ring_server = Rinda::RingServer.new tuple_space
while true
msg = gets
tuple_space.write [:message, msg]
end
######### rinda client
require 'drb/drb'
require 'rinda/tuplespace'
require 'rinda/ring'
DRb.start_service
tuple_space = Rinda::RingFinger.primary
while true
puts "message: " + tuple_space.take([:message, nil])[1]
end
问题:
1、但是多个client不能都取到tuple
2、另外一台机器上的client不能发现ringserver.
3、如果去掉take语句是可以取到消息的,但是新写入的tuple不能覆盖旧的tuple.
A RingServer allows a Rinda::TupleSpace to be located via UDP broadcasts.
可以解决这个问题了,用 RingServer,RingFinger的确可以靠 broadcast udp 包找到其他的
rinda service.但是要显式地给 drb service 绑定 uri.
- DRB以及Rinda技术详解 (正在编写中...)
- flex--spring--框架---2---正在编写中
- javabean以及内省技术详解
- javabean以及内省技术详解
- javabean以及内省技术详解
- 如何在SAP的的凭证流浏览器(DRB)中显示客户自定义的凭证
- 分布式Ruby解决之道 - DRb
- Linux 内核详解以及内核缓冲区技术
- javabean以及内省技术的详解
- 网站前端脚本的按钮功能集合---正在编写中..呵呵
- 编写hello world驱动模块,插入正在运行的ubuntu中,并进行应用调试
- web.xml详细解读(flex项目,框架:cairngorm--blazeDS--spring--ibatis)(正在编写中)
- JAR包中的MANIFEST.MF文件详解以及编写规范
- JAR包中的MANIFEST.MF文件详解以及编写规范
- Java中AOP技术详解
- Java中AOP技术详解
- 从搜索引擎技术正在发生,
- VC程序中如何结束系统正在运行的其他进程 以及本程序自身
- 自动化测试框架:自动化测试呼唤开发
- asp.net如何取得纯客户端控件的值
- C++中的extern C
- CStatic控件的基本使用
- Windows下架设Subversion服务器
- DRB以及Rinda技术详解 (正在编写中...)
- dom4j修改节点属性及写入文件
- StringBuilder 和 String 的区别
- DeepClone与ShadowClone(downmoon)
- new有三种用法
- 不要过分设计
- C++ python STL 整数划分递归算法(即一个数分为几个数的和)
- 我的程序语言实践
- 我是不是也要总结一下我的2007