Clase: Mongo::Dirección
- Hereda:
-
Objeto
- Objeto
- Mongo::Address
- Ampliado por:
- Reenviable
- Definido en:
- lib/mongo/address.rb,
lib/mongo/address/ipv.rb,4
lib/mongo/address/ipv.rb,6
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 en el espacio de nombres
Modules: Validator Clases: IPv4, IPv6, Unix
Colapso delresumen constante
- MAPA_FAMILIAR =
Mapeo de la familia de sockets a la clase resolver.
{ ::Enchufe::PF_UNIX => UNIX, ::Enchufe::AF_INET6 => IPv6, ::Enchufe::AF_INET => IPv4 }.freeze
- HOST LOCAL =
La constante localhost.
'localhost'.freeze
Colapso delresumen de atributos de instancia
-
#host ⇒ String
solo lectura
Host El nombre del host original.
- #opciones ⇒ Objeto solo lectura privada
-
#port ⇒ Integer
solo lectura
Puerto El puerto.
-
#semilla ⇒ Cadena
solo lectura
Semilla La dirección de la semilla.
Colapso del resumen del método de instancia
-
#==(otro) ⇒ true, false
Verificar la igualdad de la dirección con otra.
-
#eql?(otro) ⇒ verdadero, falso
Comprobar la igualdad para el hash.
-
#hash ⇒ Entero
Calcular el valor hash de la dirección.
-
#inicializar(semilla, opciones = {}) ⇒ Dirección
constructor
Inicializar la dirección.
-
#inspeccionar ⇒ Cadena
Obtén una inspección de dirección con impresión agradable.
-
#socket(tiempo de espera de socket, opciones = {}) ⇒ Mongo::Socket::SSL | Mongo::Socket::TCP | Mongo::Socket::Unix
privada
Obtenga un socket para la dirección almacenada en este objeto, dadas las opciones.
-
#to_s ⇒ Cadena
Obtenga la dirección como una cadena.
Detalles del constructor
#inicializar(semilla, opciones = {}) ⇒ Dirección
Inicializar la dirección.
75 76 77 78 79 80 81 82 |
# Archivo 'lib/mongo/address.rb', línea 75 def inicializar(semillas, = {}) Si semillas.nil? propagar ArgumentError, "ladirección no debe sernula" end @semilla = semillas @host, @puerto = parse_host_port @opciones = Picadillo[.map { |k, v| [k.a_sym, v] }] end |
Detalles de los atributos de instancia
#host ⇒ Cadena (solo lectura)
Devuelve el host El nombre del host original.
88 89 90 |
# Archivo 'lib/mongo/address.rb', línea 88 def host @host end |
#opciones ⇒ Objeto (solo lectura)
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
94 95 96 |
# Archivo 'lib/mongo/address.rb', línea 94 def @opciones end |
#puerto ⇒ Entero (solo lectura)
Devuelve puerto El puerto.
91 92 93 |
# Archivo 'lib/mongo/address.rb', línea 91 def Puerto @puerto end |
#semilla ⇒ Cadena (solo lectura)
Devuelve semilla La dirección de la semilla.
85 86 87 |
# Archivo 'lib/mongo/address.rb', línea 85 def semillas @semilla end |
Detalles del método de instancia
#==(otro) ⇒ true, false
Verificar la igualdad de la dirección con otra.
106 107 108 109 |
# Archivo 'lib/mongo/address.rb', línea 106 def ==(otros) return false a no ser que otros.is_a?(Dirección) host == otros.host && Puerto == otros.Puerto end |
#eql?(otro) ⇒ verdadero, falso
Comprobar la igualdad para el hash.
121 122 123 |
# Archivo 'lib/mongo/address.rb', línea 121 def eql?(otros) yo == otros end |
#hash ⇒ Entero
Calcular el valor hash de la dirección.
133 134 135 |
# Archivo 'lib/mongo/address.rb', línea 133 def hash [ host, Puerto ].hash end |
#inspeccionar ⇒ Cadena
Obtén una inspección de dirección con impresión agradable.
145 146 147 |
# Archivo 'lib/mongo/address.rb', línea 145 def inspeccionar "#<Mongo::Dirección:0x#{object_id} dirección=#{to_s}>" end |
#socket(tiempo de espera de socket, opciones = {}) ⇒ Mongo::Socket::SSL | Mongo::Socket::TCP | Mongo::Socket::Unix
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Obtenga 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 intenta resolver la dirección almacenada en este objeto en4 direcciones IPv e IPv6 mediante Socket#getaddrinfo, se conecta a las direcciones resultantes y devuelve el socket de la primera conexión exitosa. El orden en que46se intentan las familias de direcciones (IPv /IPV) es el mismo en que devuelve las getaddrinfo direcciones, y lo determina el sistema host.
La resolución de nombres se realiza en cada llamada socket. Esto se hace para que el controlador detecte inmediatamente cualquier cambio en las direcciones a las que se resuelven los nombres de host utilizados como semillas o en la configuración del servidor, incluso si se ha conectado previamente un socket al nombre o dirección de host afectado. Sin embargo, tenga en cuenta que los valores TTL de DNS aún pueden afectar cuando el controlador detecta 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.
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 252 253 254 255 |
# Archivo 'lib/mongo/address.rb', línea 219 def Socket(tiempo de espera del socket, opta = {}) csot = !!opta[:csot] opta = { connect_timeout: Servidor::CONNECT_TIMEOUT, }.update().update(Picadillo[opta.map { |k, v| [k.a_sym, v] }]) excepciones de mapa(csot) hacer Si semillas.mayúsculas y minúsculas =~ UNIX::FÓSFORO dirección_específica = UNIX.Nuevo(semillas.mayúsculas y minúsculas) return dirección_específica.Socket(tiempo de espera del socket, opta) end # Cuando el controlador se conecta a "localhost", solo intenta IPv4 # conexiones. Cuando el controlador se conecta a otros hosts, # Intente conexiones IPv4 y IPv6. familia = (host == LOCALHOST) ? ::Enchufe::AF_INET : ::Enchufe::AF_UNSPEC Error = nulo # A veces, Socket#getaddrinfo devuelve la misma información más de una vez # (múltiples elementos idénticos en la matriz devuelta). No hace # No tiene sentido intentar conectarse a la misma dirección más de una vez, por lo tanto #Eliminar duplicados aquí. infos = obtener información(host, familia) resultados = infos.map hacer |información| [información[4], información[3]] end.único resultados.cada hacer |familia, dirección_str| begin dirección_específica = MAPA FAMILIAR[familia].Nuevo(dirección_str, Puerto, host) Socket = dirección_específica.Socket(tiempo de espera del socket, opta) return Socket rescate IOError, SystemCallError, Error::Error de tiempo de espera del socket, Error::Error de socket => e Error = e end end propagar Error end end |
#to_s ⇒ Cadena
Obtenga la dirección como una cadena.
265 266 267 268 269 270 271 272 273 274 275 |
# Archivo 'lib/mongo/address.rb', línea 265 def a_s Si Puerto Si host.¿incluir?(':') "[#{host}]:#{puerto}" else "#{host }:#{puerto}" end else host end end |