Clase: Mongo::Address
- Hereda:
-
Objeto
- Objeto
- Mongo::Address
- Ampliado por:
- Reenviable
- Definido en:
- lib/mongo/address.rb,
lib/mongo/address/ipv4.rb,
lib/mongo/address/ipv6.rb,
lib/mongo/address/unix.rb,
lib/mongo/address/validator.rb
Overview
Representa una dirección a un servidor, ya sea con una dirección IP o una ruta de socket.
Definido bajo Namespace
Modules: Validator clase: IPv4, IPv6, Unix
Resumen de constantes colapsar
- FAMILY_MAP =
Mapeo de la familia de sockets a la clase resolver.
{ ::Socket::PF_UNIX => Unix, ::Socket::AF_INET6 => IPv6, ::Socket::AF_INET => IPv4 }.freeze
- LOCALHOST =
La constante localhost.
'localhost'
Resumen de atributos de la instancia colapsar
-
#host ⇒ String
Solo lectura
Host El nombre original del host.
- #opciones ⇒ Objeto Solo lectura privado
-
#port ⇒ Integer
Solo lectura
Puerto El puerto.
-
#semilla ⇒ String
Solo lectura
Seed La dirección de seed.
Resumen del método de instancia colapsar
-
#==(otro) ⇒ true, false
Verificar la igualdad de la dirección con otra.
-
#eql?(otro) ⇒ true, false
Verifica la igualdad para el hashing.
-
#hash ⇒ Integer
Calcula el valor hash de la dirección.
-
#initialize(seed, options = {}) ⇒ Address
constructor
Inicializa la dirección.
-
#inspect ⇒ string
Obtén una inspección de dirección con impresión agradable.
-
#socket(socket_timeout, opts = {}) ⇒ Mongo::Socket::SSL | Mongo::Socket::TCP | Mongo::Socket::Unix
privado
Consigue un socket para la dirección almacenada en este objeto, dadas las opciones.
-
#to_s ⇒ String
Obtén la dirección como una string.
Detalles del Constructor
#inicializar(seed, opciones = {}) ⇒ Dirección
Inicializa la dirección.
73 74 75 76 77 78 79 |
# Archivo 'lib/mongo/address.rb', línea 73 def inicializar(Semilla, = {}) propagar ArgumentError, 'la dirección no debe ser nula' si Semilla.nil? @seed = Semilla @host, @port = parse_host_port @options = encriptada[.map { |k, v| [ k.to_sym, v ] }] end |
Detalles de atributo de instancias
#host ⇒ String (solo lectura)
Devuelve host El nombre de host original.
85 86 87 |
# Archivo 'lib/mongo/address.rb', línea 85 def host @host end |
#opciones ⇒ Objeto (solo lectura)
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
91 92 93 |
# Archivo 'lib/mongo/address.rb', línea 91 def @options end |
#puerto ⇒ Entero (solo lectura)
Devuelve el puerto El puerto.
88 89 90 |
# Archivo 'lib/mongo/address.rb', línea 88 def Puerto @port end |
#semilla ⇒ string (solo lectura)
Devuelve semilla La dirección de semilla.
82 83 84 |
# Archivo 'lib/mongo/address.rb', línea 82 def Semilla @seed end |
Detalles del método de instancia
#==(otro) ⇒ true, false
Verificar la igualdad de la dirección con otra.
103 104 105 106 107 |
# Archivo 'lib/mongo/address.rb', línea 103 def ==(Otros) return false a menos que Otros.is_a?(Dirección) host == Otros.host && Puerto == Otros.Puerto end |
#eql?(otro) ⇒ true, false
Verifica la igualdad para el hashing.
119 120 121 |
# Archivo 'lib/mongo/address.rb', línea 119 def eql?(Otros) sí mismo == Otros end |
#hash ⇒ Integer
Calcula el valor hash de la dirección.
131 132 133 |
# Archivo 'lib/mongo/address.rb', línea 131 def hash [ host, Puerto ].hash end |
#inspect ⇒ String
Obtén una inspección de dirección con impresión agradable.
143 144 145 |
# Archivo 'lib/mongo/address.rb', línea 143 def inspeccionar "#<Mongo::Address:0x#{object_id} dirección=#{self}>" end |
#socket(socket_timeout, opts = {}) ⇒ Mongo::Socket::SSL | Mongo::Socket::TCP | Mongo::Socket::Unix
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Consigue un socket para la dirección almacenada en este objeto, dadas las opciones.
Si la dirección almacenada en este objeto parece una ruta Unix, este método devuelve un socket de dominio Unix para esta ruta.
De lo contrario, este método intentará resolver la dirección almacenada en este objeto a direcciones IPv4 y IPv6 mediante Socket#getaddrinfo, luego se conectará a las direcciones resultantes y devolverá el socket de la primera conexión exitosa. El orden en que se intentan las familias de direcciones (IPv4/IPV6) es el mismo orden en que las direcciones son devueltas por getaddrinfo, y es determinado por el sistema host.
La resolución de nombres se realiza en cada llamada a socket. Esto se hace para que cualquier cambio en las direcciones a las que se resuelven los nombres de host usados como semillas o en la configuración del servidor sean detectados inmediatamente por el driver, incluso si previamente se ha conectado un socket al nombre/dirección de host afectado. Sin embargo, ten en cuenta que los valores TTL de DNS pueden seguir afectando cuándo el controlador nota un cambio en una dirección de host.
Este método propaga cualquier excepción que se produzca durante la resolución de DNS y los intentos de conexión posteriores. En caso de que un nombre de host resuelva en múltiples direcciones IP, el error generado por el último intento se propaga al llamador. Este método no asigna las excepciones a subclases de Mongo::Error y puede lanzar cualquier subclase de Exception.
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 |
# Archivo 'lib/mongo/address.rb', línea 217 def enchufe(socket_timeout, opciones = {}) csot = !!opciones[:csot] opciones = { connect_timeout: Server::CONNECT_TIMEOUT, }.update().update(encriptada[opciones.map { |k, v| [ k.to_sym, v ] }]) map_exceptions(csot) hacer si Unix::coincidencia.¿corresponde?(Semilla.minúscula) specific_address = Unix.Nuevo(Semilla.minúscula) return specific_address.enchufe(socket_timeout, opciones) end # Cuando el driver se conecta a "localhost", solo intenta IPv4 # conexiones. Cuando el controlador se conecte a otros hosts, # intentar ambas conexiones IPv4 e IPv6 familia = (host == LOCALHOST) ? ::Socket::AF_INET : ::Socket::AF_UNSPEC Error = nulo # A veces, Socket#getaddrinfo devuelve la misma información más de una vez # (varios elementos idénticos en el arreglo devuelto). No hace # tiene sentido intentar conectarse a la misma dirección más de una vez, por lo tanto # eliminar duplicados aquí. infos = getaddrinfo(host, familia) Resultados = infos.map hacer |información| [ información[4], información[3] ] end.uniq Resultados.cada hacer |familia, address_str| specific_address = FAMILY_MAP[familia].Nuevo(address_str, Puerto, host) enchufe = specific_address.enchufe(socket_timeout, opciones) return enchufe rescate IOError, SystemCallError, Error::SocketTimeoutError, Error::SocketError => e Error = e end propagar Error end end |
#to_s ⇒ String
Obtén la dirección como una string.
261 262 263 264 265 266 267 268 269 270 271 |
# Archivo 'lib/mongo/address.rb', línea 261 def to_s si Puerto si host.incluir?(':') "[#{host}]:#{port}" else "#{host}:#{port}" end else host end end |