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 Clases: IPv4, IPv6, Unix
Colapso delresumen constante
- 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'.freeze
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
Semilla La dirección de la semilla.
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.
-
#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
privado
Obtenga 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.
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 @seed = semillas @host, @puerto = parse_host_port @options = Picadillo[.map { |k, v| [k.to_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 @options end |
#puerto ⇒ Entero (solo lectura)
Devuelve el puerto El puerto.
91 92 93 |
# Archivo 'lib/mongo/address.rb', línea 91 def Puerto @puerto end |
#semilla ⇒ string (solo lectura)
Devuelve semilla La dirección de la semilla.
85 86 87 |
# Archivo 'lib/mongo/address.rb', línea 85 def semillas @seed 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 menos que Otros.is_a?(Dirección) host == Otros.host && Puerto == Otros.Puerto end |
#eql?(otro) ⇒ true, false
Verifica la igualdad para el hashing.
121 122 123 |
# Archivo 'lib/mongo/address.rb', línea 121 def eql?(Otros) sí mismo == Otros end |
#hash ⇒ Integer
Calcula el valor hash de la dirección.
133 134 135 |
# Archivo 'lib/mongo/address.rb', línea 133 def hash [ host, Puerto ].hash end |
#inspect ⇒ String
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::Address:0x#{object_id} address=#{to_s}>" end |
#socket(socket_timeout, opts = {}) ⇒ 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 a direcciones IPv4 e IPv6 usando Socket#getaddrinfo, luego se conecta a las direcciones resultantes y devuelve el socket de la primera conexión exitosa. El orden en que se prueban las familias de direcciones (IPv4/IPV6) es el mismo en que se devuelven las direcciones por getaddrinfo y está 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.
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 enchufe(socket_timeout, opta = {}) csot = !!opta[:csot] opta = { connect_timeout: Server::CONNECT_TIMEOUT, }.update().update(Picadillo[opta.map { |k, v| [k.to_sym, v] }]) map_exceptions(csot) hacer si semillas.minúscula =~ Unix::coincidencia specific_address = Unix.Nuevo(semillas.minúscula) return specific_address.enchufe(socket_timeout, opta) end # Cuando el driver se conecta a "localhost", solo intenta IPv4 # conexiones. Cuando el controlador se conecta a otros hosts, # Intente conexiones IPv4 y 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 # No 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.único Resultados.cada hacer |familia, address_str| begin specific_address = MAPA FAMILIAR[familia].Nuevo(address_str, Puerto, host) enchufe = specific_address.enchufe(socket_timeout, opta) return enchufe rescate IOError, SystemCallError, Error::SocketTimeoutError, Error::Error de socket => e Error = e end end propagar Error end end |
#to_s ⇒ String
Obtén la dirección como una string.
265 266 267 268 269 270 271 272 273 274 275 |
# Archivo 'lib/mongo/address.rb', línea 265 def to_s si Puerto si host.incluir?(':') "[#{host}]:#{puerto}" else "#{host }:#{puerto}" end else host end end |