Clase: Mongo::servidor::Connection

Hereda:
ConnectionBase Mostrar todo
Ampliado por:
Reenviable
Incluye:
Id, Monitoreo::Publicable, Reintentable
Definido en:
lib/mongo/servidor/conexión.rb

Overview

Esta clase modela las conexiones de socket para servidores y su comportamiento.

Desde:

  • 2.0.0

Colapso delresumen constante

ping =
Obsoleto.

Ya no es necesario con la especificación de Selección de Servidor.

El comando ping.

Desde:

  • 2.1.0

{ ping => 1 }.freeze
PING_OP_MSG =
Obsoleto.

Ya no es necesario con la especificación de Selección de Servidor.

El comando de ping para un OP_MSG (versiones de servidor ≥ 3.6).

Desde:

  • 2.5.0

{ ping => 1, '$db' => Database::ADMIN }.freeze
MENSAJE_PING =
Obsoleto.

Ya no es necesario con la especificación de Selección de Servidor.

Mensaje de ping.

Desde:

  • 2.1.0

protocolo::Query.Nuevo(Database::ADMIN, Database::Comando, PING, :limit => -1)
PING_OP_MSG_MENSAJE =
Obsoleto.

Ya no es necesario con la especificación de Selección de Servidor.

Mensaje ping como un OP_MSG (versiones del servidor >= 3.6).

Desde:

  • 2.5.0

protocolo::Msg.Nuevo([], {}, PING_OP_MSG)
PING_BYTES =
Obsoleto.

Ya no es necesario con la especificación de Selección de Servidor.

El mensaje de ping como bytes sin procesar.

Desde:

  • 2.1.0

MENSAJE_PING.serializar.to_s.freeze
PING_OP_MSG_BYTES =
Obsoleto.

Ya no es necesario con la especificación de Selección de Servidor.

El mensaje de ping OP_MSG como bytes sin procesar (versiones del servidor >= 3.6).

Desde:

  • 2.5.0

PING_OP_MSG_MENSAJE.serializar.to_s.freeze

Constantes incluidas desde Loggable

Registrable::PREFIX

Constantes heredadas de ConnectionBase

Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, Mongo::Server::ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, Mongo::Server::ConnectionBase::REDUCED_MAX_BSON_SIZE

Resumen de atributos de la instancia colapsar

Atributos incluidos de supervisión::Publishable

#monitoring

Atributos heredados de ConnectionBase

#descripción, #opciones, #servidor

Atributos heredados de ConnectionCommon

#compressor, #pid

Resumen del método de instancia colapsar

Métodos incluidos de Id

incluido

Métodos incluidos en Retryable

#read_worker, #select_server, #write_worker

Métodos incluidos en Monitoring::Publishable

#publicar_evento_cmap, #publicar_evento, #publicar_evento_sdam

Métodos incluidos desde Registrable

#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger

Métodos heredados de ConnectionBase

#metadatos_de_la_aplicación, #envío, #generación, #id_del_servicio

Métodos heredados de ConnectionCommon

#handshake_command, #handshake_document

Detalles del constructor

#initialize(servidor, opciones = {}) ⇒ Conexion

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Nota:

La conexión nunca debe instanciarse directamente fuera de un servidor.

Crea un nuevo objeto de conexión a la dirección de destino especificada con las opciones especificadas.

El constructor no realiza ninguna entrada/salida (por lo tanto, no crea sockets, ni establece handshakes ni autentica); debes llamar a connect! método en el objeto de conexión para crear la conexión de red.

Ejemplos:

Cree la conexión.

Connection.new(server)

Parámetros:

  • Server (Mongo::servidor)  —

    El servidor para el cual se establece la conexión.

  • opciones (Hash) (por defecto: {})

    Las opciones de conexión.

Opciones Hash (options):

  • pipe (IO)

    El descriptor de archivo para la terminal de lectura del pipe al que se le debe hacer listening durante la llamada de sistema select cuando se lee del socket.

  • :generación (Entero)

    La generación de esta conexión. La generación solo debe especificarse en esta opción cuando no se esté en el modo de balanceo de cargas, y debe ser la generación del pool de conexiones cuando se cree la conexión. En el modo de balanceo de carga, la generación se establece en la conexión después de que se complete el handshake.

  • API del servidor (Hash)

    La versión de la API del servidor solicitada. Este hash puede contener los siguientes elementos:

    • :version – string

    • :estricto – booleano

    • :deprecation_errors – booleano

Desde:

  • 2.0.0



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# Archivo 'lib/mongo/server/connection.rb', línea 106

def inicializar(Server, opciones = {})
  si Server.load_balancer? && opciones[:generación]
    propagar ArgumentError, "La generación no puede establecerse cuando el servidor es un balanceador de carga"
  end

  @id = Server.siguiente_id_de_conexión
  @global_id = sí mismo.clase.siguiente_id
  @monitoring = Server.Monitoring
  @options = opciones.freeze
  @server = Server
  @socket = nulo
  @last_checkin = nulo
  @auth_mechanism = nulo
  @pid = Proceso.pid
  @anclado = false

  publish_cmap_event(
    Monitoring::Evento::Cmap::Conexión creada.Nuevo(dirección, ID)
  )
end

Detalles de los atributos de instancia

#global_idInteger (solo lectura)

a través de todas las conexiones.

Devuelve:

  • (Número entero)

    El ID global de la conexión. Será único.

Desde:

  • 2.0.0



140
141
142
# Archivo 'lib/mongo/server/connection.rb', línea 140

def global_id
  @global_id
end

#idInteger (solo lectura)

a través de conexiones con el mismo objeto de servidor.

Devuelve:

  • (Número entero)

    El ID de la conexión. Esto será único

Desde:

  • 2.9.0



136
137
138
# Archivo 'lib/mongo/server/connection.rb', línea 136

def ID
  @id
end

#last_checkinHora (solo lectura)

Devuelve la última vez que se revisó la conexión en un grupo.

Devuelve:

  • (Time)

    La última vez que la conexión se verificó y se devolvió al grupo.

Desde:

  • 2.5.0



130
131
132
# Archivo 'lib/mongo/server/connection.rb', línea 130

def last_checkin
  @last_checkin
end

Detalles del método de instancia

#cerrado?verdadero | falso

Si la conexión fue cerrada.

Las conexiones cerradas ya no deben utilizarse. En su lugar, obtiene una nueva conexión del pool de conexiones.

Devuelve:

  • (true | false)

    Si la conexión fue cerrada.

Desde:

  • 2.9.0



166
167
168
# Archivo 'lib/mongo/server/connection.rb', línea 166

def ¿Cerrado?
  !!@closed
end

#connect!(contexto = nil) ⇒ true

Nota:

Este método muta el objeto de conexión estableciendo un socket si anteriormente no existía uno.

Establece una conexión de red con la dirección de destino.

Si la conexión ya está establecida, este método no hace nada.

Ejemplos:

Conéctese al host.

connection.connect!

Devuelve:

  • (cierto)

    Si la conexión se realizó correctamente.

Desde:

  • 2.0.0



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
# Archivo 'lib/mongo/server/connection.rb', línea 229

def ¡conectar!(context = nulo)
  raise_if_closed!

  a menos que @socket
    @socket = create_socket(context)
    @descripción, @compressor = do_connect

    si Server.load_balancer?
      si Lint.¿habilitado?
        a menos que service_id
          propagar Error::InternalDriverError, "La conexión es a un balanceador de carga y debe tener el service_id configurado aquí, pero no lo tiene"
        end
      end
      @generación = grupo de conexiones.generation_manager.Generación(service_id: service_id)
    end

    publish_cmap_event(
      Monitoring::Evento::Cmap::Conexión lista.Nuevo(dirección, ID)
    )

    @close_event_published = false
  end
  true
end

#¿conectado?verdadero | falso

Si la conexión estaba conectada y no se interrumpió, no se cerró ni se produjo un error.

Devuelve:

  • (true | false)

    si la conexión se estableció.

Desde:

  • 2.0.0



154
155
156
# Archivo 'lib/mongo/server/connection.rb', línea 154

def ¿conectado?
  !¿Cerrado? && !error? && !¿interrumpido? && !!@socket
end

#connection_poolObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

El pool de conexiones de la que se creó esta conexión. Puede ser nulo.

Desde:

  • 2.0.0



146
147
148
# Archivo 'lib/mongo/server/connection.rb', línea 146

def grupo de conexiones
  opciones[:pool_de_conexiones]
end

#¡desconectar!(opciones = nulo) ⇒ verdadero

Nota:

Después de desconectar una conexión, ya no debe utilizarse. Una nueva conexión debe obtenerse del pool de conexiones, el cual devolverá una conexión lista o creará una nueva conexión. Si la linting está habilitada, reutilizar una conexión desconectada generará Error::LintError. Si la revisión de código no está activada, se creará un registro de advertencia.

Nota:

Este método muta el objeto de conexión estableciendo el socket en nil si el cierre es exitoso.

Desconecte la conexión.

Parámetros:

  • opciones (Hash) (predeterminado: nulo)

    un conjunto personalizable de opciones

Opciones Hash (options):

  • Motivo: (Símbolo)

    La razón por la cual se está cerrando la conexión.

  • :interrumpido (true | false)

    Si la conexión se interrumpió o no.

Devuelve:

  • (cierto)

    Si la desconexión tuvo éxito.

Desde:

  • 2.0.0



311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
# Archivo 'lib/mongo/server/connection.rb', línea 311

def ¡desconectar!(opciones = nulo)
  # Nota: @closed puede ser verdadero aquí, pero también podemos tener un socket.
  # Comprueba el socket y no la bandera @closed.
  @auth_mechanism = nulo
  @last_checkin = nulo
  si enchufe
    enchufe.Cerrar rescate nulo
    @socket = nulo
  end
  @closed = true
  ¡interrumpido! si opciones && opciones[:interrumpido]

  # Para cumplir con las pruebas de especificaciones de CMAP, publica eventos de cierre incluso si los
  # El socket nunca se conectó (y por lo tanto el evento listo nunca se conectó)
  # publicado). Pero rastrear si publicamos el evento de cierre y no
  # publicarlo varias veces, a menos que el socket se haya reconectado -
  # en ese caso, publica el evento de cierre una vez por cada cierre de socket.
  a menos que @close_event_published
    motivo = opciones && opciones[Motivo:]
    publish_cmap_event(
      Monitoring::Evento::Cmap::ConnectionClosed.Nuevo(
        dirección,
        ID,
        motivo,
      ),
    )
    @close_event_published = true
  end

  true
end

#error?Boolean

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Devuelve:

  • (booleano)

Desde:

  • 2.0.0



186
187
188
# Archivo 'lib/mongo/server/connection.rb', línea 186

def error?
  !!@error
end

#¡interrumpido!objeto

Marcar la conexión como interrumpida.

Desde:

  • 2.0.0



181
182
183
# Archivo 'lib/mongo/server/connection.rb', línea 181

def ¡interrumpido!
  @interrumpido = true
end

#interrumpido?verdadero | falso

Si la conexión se interrumpió.

Las conexiones interrumpidas ya fueron eliminadas del grupo y no deben volver a ser registradas en el grupo.

Devuelve:

  • (true | false)

    Si la conexión se interrumpió.

Desde:

  • 2.0.0



176
177
178
# Archivo 'lib/mongo/server/connection.rb', línea 176

def ¿interrumpido?
  !!@interrumpido
end

#pinObjeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Marcar la conexión como fijada.

Desde:

  • 2.0.0



205
206
207
# Archivo 'lib/mongo/server/connection.rb', línea 205

def alfiler
  @anclado = true
end

#pingtrue, false

Obsoleto.

Ya no es necesario con la especificación de Selección de Servidor.

Nota:

Esto utiliza un mensaje de ping pre-serializado para optimización.

Haga ping a la conexión para comprobar si el servidor responde a los comandos. Esto no genera bloqueos en el servidor.

Ejemplos:

Hacer ping a la conexión.

connection.ping

Devuelve:

  • (verdadero,falso)

    Si el servidor está aceptando conexiones.

Desde:

  • 2.1.0



356
357
358
359
360
361
362
363
364
365
# Archivo 'lib/mongo/server/connection.rb', línea 356

def ping
  bytes = Funcionalidades.op_msg_enabled? ? PING_OP_MSG_BYTES : PING_BYTES
  asegurar_conectado hacer |enchufe|
    respuesta = add_server_diagnostics hacer
      enchufe.guardar(bytes)
      protocolo::Mensaje.deserializar(enchufe, max_message_size)
    end
    respuesta.Documentos[0][Operación::Resultado::Vale] == 1
  end
end

#¿fijado?Booleano

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Si la conexión es utilizada por una transacción o por operaciones de cursor.

Las conexiones fijadas no deben desconectarse ni eliminarse de un pool de conexiones si están inactivas o desactualizadas.

# @return [ true | false ] Indica si la conexión está fijada.

Devuelve:

  • (booleano)

Desde:

  • 2.0.0



198
199
200
# Archivo 'lib/mongo/server/connection.rb', línea 198

def ¿fijado?
  @anclado
end

#¡registro_de_comprobación!yo mismo

Registre la última hora de checkin.

Ejemplos:

Registra la hora de registro en este conexión.

connection.record_checkin!

Devuelve:

  • (ser)

Desde:

  • 2.5.0



386
387
388
389
# Archivo 'lib/mongo/server/connection.rb', línea 386

def registro_chequeo!
  @last_checkin = Tiempo.ahora
  sí mismo
end

#socket_timeoutFloat También conocido como: timeout

Obtén el tiempo de espera para ejecutar una operación en un socket.

Devuelve:

  • (Float)

    El tiempo de espera de la operación en segundos.

Desde:

  • 2.0.0



372
373
374
# Archivo 'lib/mongo/server/connection.rb', línea 372

def socket_timeout
  @se acabó el tiempo ||= opciones[:tiempo de espera del socket]
end

#unpinObject

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Marca la conexión como no fijada.

Desde:

  • 2.0.0



212
213
214
# Archivo 'lib/mongo/server/connection.rb', línea 212

def unpin
  @anclado = false
end