类:Mongo::Address
- 继承:
-
对象
- 对象
- 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解决,也可以是套接字路径。
在命名空间下定义
常量摘要折叠
- FAMILY_MAP =
从套接字系列到解析程序类的映射。
{ ::套接字::PF_UNIX => Unix, ::套接字::AF_INET 6 => IPv6, ::套接字::AF_INET => IPv4 }.冻结
- LOCALHOST =
本地主机常量。
'localhost'.冻结
实例属性摘要折叠
-
#主机⇒ string
只读
主机 原始主机名。
- # options ⇒ 对象 只读 private
-
# port ⇒ Integer
只读
端口 端口。
-
#种子⇒ string
只读
种子 种子解决。
实例方法摘要折叠
-
# == (other) ⇒ true, false
检查地址是否与另一个地址相等。
-
# eql? (其他)→ true、false
检查哈希的相等性。
-
#哈希⇒ 整数
计算该解决的哈希值。
-
#initialize (seed, options = {}) ⇒ 地址
构造函数
初始化解决。
-
#检查⇒ string
进行美观的地址检查。
-
# socket (socket_timeout, opts = {}) ⇒ Mongo::Socket::SSL | Mongo::Socket::TCP | Mongo::Socket::Unix
private
根据给定的选项,获取此对象中存储的地址的套接字。
-
# to_s ⇒ string
获取string形式的解决。
构造函数详情
#initialize (seed, options = {}) ⇒地址
初始化解决。
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 (只读)
返回托管原始托管名。
88 89 90 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 88 def 主机 @host end |
# options ⇒对象(只读)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
94 95 96 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 94 def @options end |
# port ⇒ Integer (readonly)
返回 port 端口。
91 92 93 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 91 def 端口 @port end |
#种子⇒ string (只读)
返回种子 种子地址。
85 86 87 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 85 def 种子轮 @seed end |
实例方法详细信息
# == (other) ⇒ true , false
检查地址是否与另一个地址相等。
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
检查哈希的相等性。
121 122 123 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 121 def eql?(其他) self == 其他 end |
#哈希⇒整数
计算该解决的哈希值。
133 134 135 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/address.rb', line 133 def 哈希 [ 主机, 端口 ].哈希 end |
#检查⇒ string
进行美观的地址检查。
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 的任何子类。
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_s ⇒ string
获取string形式的解决。
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 |