非常教程

Ruby 2.4参考手册

DRb

Rinda::RingFinger

Parent:Object

RingFinger客户端使用RingFinger来发现RingServer的TupleSpace。通常,客户端需要做的就是调用:: primary来检索远程TupleSpace,然后可以开始使用它。

要查找第一个可用的远程TupleSpace:

Rinda::RingFinger.primary

创建一个广播到自定义列表的RingFinger:

rf = Rinda::RingFinger.new  ['localhost', '192.0.2.1']
rf.primary

Rinda :: RingFinger还可以理解多播地址并正确设置它们。这使您可以在同一主机上运行多个RingServer:

rf = Rinda::RingFinger.new ['239.0.0.1']
rf.primary

您可以使用multicast_hops为多播搜索设置跳数(或TTL)。

如果您使用IPv6多播,则可能需要同时设置地址和出站接口索引:

rf = Rinda::RingFinger.new ['ff02::1']
rf.multicast_interface = 1
rf.primary

目前没有简单的方法来按名称获取接口索引。

属性

broadcast_listRW

RingFinger将发送查询分组的地址列表。

multicast_hopsRW

发送的多播数据包的最大跳数(如果在广播列表中使用多播地址)。默认值是1(与UDP广播相同)。

multicast_interfaceRW

发送IPv6组播数据包的接口索引。

portRW

RingFinger将发送查询包的端口。

primaryRW

在#lookup_ring_any被调用后包含第一个广告的TupleSpace。

公共类方法

finger() Show source

创建一个单例RingFinger并查找RingServer。返回创建的RingFinger。

# File lib/rinda/ring.rb, line 284
def self.finger
  unless @@finger
    @@finger = self.new
    @@finger.lookup_ring_any
  end
  @@finger
end

new(broadcast_list = @@ broadcast_list,port= Ring_PORT)显示源

创建一个新的RingFinger将寻找RingServers在port上的地址broadcast_list

如果broadcast_list包含多播地址,则将使用给定的#multicast_hops和multicast_interface进行多播查询。

# File lib/rinda/ring.rb, line 340
def initialize(broadcast_list=@@broadcast_list, port=Ring_PORT)
  @broadcast_list = broadcast_list || ['localhost']
  @port = port
  @primary = nil
  @rings = []

  @multicast_hops = 1
  @multicast_interface = 0
end

primary() 显示源

返回第一个公布的TupleSpace。

# File lib/rinda/ring.rb, line 295
def self.primary
  finger.primary
end

to_a() 显示源

包含除主数据库外的所有发现的TupleSpaces。

# File lib/rinda/ring.rb, line 302
def self.to_a
  finger.to_a
end

公共实例方法

each() { |primary| ... } 显示源

从主要开始迭代所有发现的TupleSpaces。

# File lib/rinda/ring.rb, line 360
def each
  lookup_ring_any unless @primary
  return unless @primary
  yield(@primary)
  @rings.each { |x| yield(x) }
end

lookup_ring(timeout = 5,&block)显示源文件

查看RingServers等待timeout几秒钟。RingServers将block作为回调给出,将用远程TupleSpace调用。

# File lib/rinda/ring.rb, line 372
def lookup_ring(timeout=5, &block)
  return lookup_ring_any(timeout) unless block_given?

  msg = Marshal.dump([[:lookup_ring, DRbObject.new(block)], timeout])
  @broadcast_list.each do |it|
    send_message(it, msg)
  end
  sleep(timeout)
end

lookup_ring_any(timeout=5) 显示源

返回找到的第一个远程元组空间。通过调用可以找到任何进一步恢复的TupleSpaces to_a

# File lib/rinda/ring.rb, line 386
def lookup_ring_any(timeout=5)
  queue = Thread::Queue.new

  Thread.new do
    self.lookup_ring(timeout) do |ts|
      queue.push(ts)
    end
    queue.push(nil)
  end

  @primary = queue.pop
  raise('RingNotFound') if @primary.nil?

  Thread.new do
    while it = queue.pop
      @rings.push(it)
    end
  end

  @primary
end

to_a() 显示源

包含除主数据库外的所有发现的TupleSpaces。

# File lib/rinda/ring.rb, line 353
def to_a
  @rings
end
Ruby 2.4

Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言,是世界上最优美而巧妙的语言。

主页 https://www.ruby-lang.org/
源码 https://github.com/ruby/ruby
版本 2.4
发布版本 2.4.1

Ruby 2.4目录

1.缩略 | Abbrev
2.ARGF
3.数组 | Array
4.Base64
5.基本对象 | BasicObject
6.基准测试 | Benchmark
7.BigDecimal
8.绑定 | Binding
9.CGI
10.类 | Class
11.比较 | Comparable
12.负责 | Complex
13.计算续体 | Continuation
14.覆盖 | Coverage
15.CSV
16.日期 | Date
17.日期时间 | DateTime
18.DBM
19.代理 | Delegator
20.摘要 | Digest
21.Dir
22.DRb
23.编码 | Encoding
24.枚举 | Enumerable
25.枚举 | Enumerator
26.ENV
27.ERB
28.错误 | Errors
29.Etc
30.期望值 | Exception
31.错误类 | FalseClass
32.Fiber
33.Fiddle
34.文件 | File
35.文件实用程序 | FileUtils
36.查找 | Find
37.浮点 | Float
38.Forwardable
39.GC
40.GDBM
41.GetoptLong
42.Hash
43.Integer
44.IO
45.IPAddr
46.JSON
47.Kernel
48.语言 | 3Language
49.记录 | Logger
50.编排 | Marshal
51.MatchData
52.数学 | Math
53.矩阵 | Matrix
54.方法 | Method
55.模型 | Module
56.监控 | Monitor
57. 互斥 | Mutex
58.Net
59.Net::FTP
60.Net::HTTP
61.Net::IMAP
62.Net::SMTP
63.NilClass
64.数字 | Numeric
65.对象 | Object
66.ObjectSpace
67.Observable
68.Open3
69.OpenSSL
70.OpenStruct
71.OpenURI
72.OptionParser
73.路径名 | Pathname
74.完整输出 | PrettyPrint
75.Prime
76.Proc
77.过程 | Process
78.PStore
79.PTY
80.队列 | Queue
81.随机 | Random
82.范围 | Range
83.合理的 | Rational
84.Readline
85.Regexp
86.Resolv
87.Ripper
88.RubyVM
89.Scanf
90.SDBM
91.SecureRandom
92.Set
93.Shell
94.信号 | Signal
95.Singleton
96.套接字 | Socket
97.字符串 | String
98.StringIO
99.StringScanner
100.结构 | Struct