类:Mongo::Address

继承:
对象
  • 对象
显示全部
扩展方式:
可转发
定义于:
构建/ruby-driver-v2.19 /lib/mongo
2.19mongo4
2.19mongo6
219mongo
219/mongo
解决.rb , 构建/ruby-driver-v /lib/ / 解决/ipv.rb, 构建/ruby-driver-v /lib/ / 解决/ipv.rb, 构建 , 构建

Overview

表示服务器的解决,可以是IP解决,也可以是套接字路径。

由于:

  • 2.0.0

在命名空间下定义

模块: 验证器 类: IPv4, IPv6, Unix

常量摘要折叠

FAMILY_MAP =

从套接字系列到解析程序类的映射。

由于:

  • 2.0.0

{
  ::套接字::PF_UNIX => Unix,
  ::套接字::AF_INET 6 => IPv6,
  ::套接字::AF_INET => IPv4
}.冻结
LOCALHOST =

本地主机常量。

由于:

  • 2.1.0

'localhost'.冻结

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#initialize (seed, options = {}) ⇒地址

初始化解决。

例子:

使用 DNS 条目和端口初始化地址。

Mongo::Address.new("app.example.com:27017")

使用 DNS 条目初始化解决,不使用端口。

Mongo::Address.new("app.example.com")

使用 IPV 4地址和端口初始化该地址。

Mongo::Address.new("127.0.0.1:27017")

使用 IPV 4解决初始化该解决,但不使用端口。

Mongo::Address.new("127.0.0.1")

使用 IPV 6地址和端口初始化该地址。

Mongo::Address.new("[::1]:27017")

使用 IPV 6解决初始化该解决,但不使用端口。

Mongo::Address.new("[::1]")

使用 UNIX 套接字初始化解决。

Mongo::Address.new("/path/to/socket.sock")

参数:

  • 种子轮 ( string )

    提供的解决。

  • 选项 哈希 (默认为: {}

    解决选项。

选项哈希 ( options ):

  • :connect_timeout 浮点

    连接超时。

由于:

  • 2.0.0



75
76
77
78
79
80
81
82
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 75

def 初始化(种子轮, 选项 = {})
  if 种子轮.nil?
    提高 ArgumentError, 解决不得为 nil 
  end
  @seed = 种子轮
  @host, @port = parse_host_port
  @options = 哈希[选项.map { |k, v| [k.to_sym, v] }]
end

实例属性详细信息

#主机string (只读)

返回托管原始托管名。

返回:

  • ( string )

    托管原始托管名。

由于:

  • 2.0.0



88
89
90
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 88

def 主机
  @host
end

# options对象(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.0.0



94
95
96
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 94

def 选项
  @options
end

# portInteger (readonly)

返回 port 端口。

返回:

  • ( Integer )

    port 端口。

由于:

  • 2.0.0



91
92
93
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 91

def 端口
  @port
end

#种子string (只读)

返回种子 种子地址。

返回:

  • ( string )

    种子 种子解决。

由于:

  • 2.0.0



85
86
87
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 85

def 种子轮
  @seed
end

实例方法详细信息

# == (other) ⇒ true , false

检查地址是否与另一个地址相等。

例子:

检查解决相等性。

address == other

参数:

  • 其他 ( Object )

    另一个对象。

返回:

  • ( true , false )

    如果对象相等。

由于:

  • 2.0.0



106
107
108
109
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 106

def ==(其他)
  return false 除非 其他.is_a?(地址)
  主机 == 其他.主机 && 端口 == 其他.端口
end

# eql? (其他)→ true , false

检查哈希的相等性。

例子:

检查哈希相等性。

address.eql?(other)

参数:

  • 其他 ( Object )

    另一个对象。

返回:

  • ( true , false )

    如果对象相等。

由于:

  • 2.2.0



121
122
123
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 121

def eql?(其他)
  self == 其他
end

#哈希整数

计算该解决的哈希值。

例子:

计算哈希值。

address.hash

返回:

  • ( Integer )

    哈希值。

由于:

  • 2.0.0



133
134
135
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 133

def 哈希
  [ 主机, 端口 ].哈希
end

#检查string

进行美观的地址检查。

例子:

获取解决检查。

address.inspect

返回:

  • ( string )

    不错的检查string 。

由于:

  • 2.0.0



145
146
147
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 145

def 检查
  " #<Mongo::Address: 0 x #{ object_id } address= #{ to_s } > "
end

# socket (socket_timeout, opts = {}) ⇒ Mongo::Socket::SSL | Mongo::Socket::TCP | Mongo::Socket::Unix

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

根据给定的选项,获取此对象中存储的地址的套接字。

如果此对象中存储的解决看起来像 Unix 路径,则此方法返回此路径的 Unix 域套接字。

否则,此方法尝试使用Socket#getaddrinfo将存储在此对象中的解决解析为 IPv 4和 IPv 6地址,然后连接到结果地址并返回第一个成功连接的套接字。 尝试解决族 (IPv 4 /IPV 6 ) 的顺序与getaddrinfo返回地址的顺序相同,由托管系统确定。

每次socket调用时都会执行名称解析。 这样做是为了对用作种子或在服务器配置中解析的托管名所解析到的地址进行的任何更改,驾驶员都会立即注意到,即使套接字之前已连接到受影响的托管名/解决。 但请注意,DNS TTL值仍可能会影响驾驶员何时注意到托管解决更改。

此方法传播 DNS 解析和后续连接尝试期间引发的任何异常。 如果托管名解析为多个IP地址,则最后一次尝试引发的错误将传播给调用者。 此方法不会将异常映射到 Mongo::Error 子类,并且可能会引发 Exception 的任何子类。

例子:

获取套接字。

address.socket(5, :ssl => true)

参数:

  • socket_timeout (浮点)

    套接字超时。

  • opts 哈希 (默认为: {}

    选项。

选项哈希 ( opts ):

  • :connect_timeout 浮点

    连接超时。

  • :ssl ( true | false )

    是否使用 SSL。

  • :ssl_ca_cert string

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_ca_cert_object ( Array<OpenSSL::X 509 ::Certificate> )

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_ca_cert_string string

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_cert string

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_cert_object ( OpenSSL::X 509 ::Certificate )

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_cert_string string

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_key string

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_key_object ( OpenSSL::PKey )

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_key_pass_phrase string

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_key_string string

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_verify ( true , false )

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_verify_certificate ( true , false )

    与相应的 Client/Socket::SSL 选项相同。

  • :ssl_verify_hostname ( true , false )

    与相应的 Client/Socket::SSL 选项相同。

返回:

引发:

由于:

  • 2.0.0



216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 216

def 套接字(socket_timeout, opts = {})
  opts = {
    connect_timeout: 服务器::CONNECT_TIMEOUT,
  }.update(选项).update(哈希[opts.map { |k, v| [k.to_sym, v] }])

  map_Exceptions do
    if 种子轮.Downcase =~ Unix::匹配
      特定地址 = Unix.new(种子轮.Downcase)
      return 特定地址.套接字(socket_timeout, opts)
    end

    # 当驱动程序连接到“localhost”时,它只尝试 IPv 4
    # 个连接。 当驾驶员连接到其他主机时,它会
    # 尝试 IPv 4和 IPv 6连接。
    家庭情况 = (主机 == localhost) ? ::套接字::AF_INET : ::套接字::AF_UNSPEC
    错误 = nil
    # 有时 Socket#getaddrinfo 会多次返回相同的信息
    # (返回的大量中有多个相同的项目)。 它不会使
    #Sense 尝试多次连接到同一解决,因此
    # 消除此处的重复项。
    信息 = ::套接字.getaddrinfo(主机, nil, 家庭情况, ::套接字::SOCK_STREAM)
    结果 = 信息.map do |信息|
      [信息[4], 信息[3]]
    end.uniq
    结果. do |家庭情况, Address_str|
      开始
        特定地址 = FAMILY_MAP[家庭情况].new(Address_str, 端口, 主机)
        套接字 = 特定地址.套接字(socket_timeout, opts)
        return 套接字
      救援 IOError, SystemCallError, 错误::SocketTimeoutError, 错误::SocketError => e
        错误 = e
      end
    end
    提高 错误
  end
end

# to_sstring

获取string形式的解决。

例子:

获取string形式的解决。

address.to_s

返回:

  • ( string )

    漂亮的string 。

由于:

  • 2.0.0



261
262
263
264
265
266
267
268
269
270
271
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 261

def to_s
  if 端口
    if 主机.包括?(' : ')
      " [ #{ 托管 } ]: #{ port } "
    else
      " #{ 托管 } : #{ port } "
    end
  else
    主机
  end
end