Clase: Mongo::servidor::Connection

Hereda:
ConnectionBase Mostrar todo
Ampliado por:
Reenviable
Incluye:
Id, Monitoring::Publishable, Retryable
Definido en:
lib/mongo/server/connection.rb

Overview

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

Desde:

  • 2.0.0

Resumen de constantes colapsar

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 "ping" para un OP_MSG

Desde:

  • 2.5.0

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

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

Mensaje de ping como un OP_MSG

Desde:

  • 2.5.0

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

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

El mensaje ping OP_MSG como bytes sin procesar

Desde:

  • 2.5.0

PING_OP_MSG_MENSAJE.serializar.to_s.freeze

Constantes incluidas desde Loggable

Loggable::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 de Retryable

#read_worker, #select_server, #with_overload_retry, #write_worker

Métodos incluidos de Monitoring::Publishable

#publish_cmap_event, #publish_event, #publish_sdam_event

Métodos incluidos desde Registrable

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

Métodos heredados de ConnectionBase

#app_metadata, #dispatch, #generation, #service_id

Métodos heredados de ConnectionCommon

#handshake_command, #handshake_document

Detalles del Constructor

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

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.

Nota:

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

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

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 (encriptada) (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 (Integer)

    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 (encriptada)

    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



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Archivo 'lib/mongo/server/connection.rb', línea 90

def inicializar(Server, opciones = {})
  si Server.load_balancer? && opciones[:generación]
    propagar ArgumentError, 'No se puede establecer la generación cuando el servidor es un balanceador de carga'
  end

  @id = Server.next_connection_id
  @global_id = sí mismo.clase.next_id
  @monitoring = Server.Monitoring
  @options = opciones.freeze
  @server = Server
  @socket = nulo
  @last_checkin = nulo
  @auth_mechanism = nulo
  @pid = Proceso.pid
  @pin_reasons = Configura.Nuevo

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

Detalles de atributo de instancias

#global_idInteger (solo lectura)

a través de todas las conexiones.

Devuelve:

  • (Número entero)

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

Desde:

  • 2.0.0



124
125
126
# Archivo 'lib/mongo/server/connection.rb', línea 124

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



120
121
122
# Archivo 'lib/mongo/server/connection.rb', línea 120

def ID
  @id
end

#last_checkinTime (solo lectura)

Devuelve La última vez que la conexión fue revisada en un pool.

Devuelve:

  • (Time)

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

Desde:

  • 2.5.0



114
115
116
# Archivo 'lib/mongo/server/connection.rb', línea 114

def last_checkin
  @last_checkin
end

Detalles del método de instancia

#cerrado?verdadero | falso

Si la conexión se cerró o no.

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 se cerró.

Desde:

  • 2.9.0



152
153
154
# Archivo 'lib/mongo/server/connection.rb', línea 152

def ¿Cerrado?
  !!@closed
end

#connect!(contexto = nil) ⇒ true

Nota:

Este método modifica el objeto de conexión estableciendo un socket si previamente 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 tuvo éxito.

Desde:

  • 2.0.0



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

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? && !service_id
        propagar Error::InternalDriverError,
              'La conexión es a un balanceador de carga y debe tener service_id establecido aquí, pero no lo tiene'
      end
      @generación = connection_pool.generation_manager.Generación(service_id: service_id)
    end

    publish_cmap_event(
      Monitoring::Evento::Cmap::ConnectionReady.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



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

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

#connection_poolObjeto

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.

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

Desde:

  • 2.0.0



132
133
134
# Archivo 'lib/mongo/server/connection.rb', línea 132

def connection_pool
  opciones[t:connection_pool]
end

#disconnect!(opciones = nil) ⇒ true

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 (encriptada) (valor por defecto: nil)

    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



310
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
342
343
344
# Archivo 'lib/mongo/server/connection.rb', línea 310

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
    begin
      enchufe.Cerrar
    rescate StandardError
      nulo
    end
    @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 ready nunca se
  # publicado). Pero rastrear si publicamos el evento de cierre y no
  # publícalo varias veces, a menos que la conexión del socket haya sido restablecida -
  # 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 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.

Devuelve:

  • (booleano)

Desde:

  • 2.0.0



172
173
174
# Archivo 'lib/mongo/server/connection.rb', línea 172

def error?
  !!@error
end

#¡interrumpido!objeto

Marcar la conexión como interrumpida.

Desde:

  • 2.0.0



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

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



162
163
164
# Archivo 'lib/mongo/server/connection.rb', línea 162

def ¿interrumpido?
  !!@interrumpido
end

#pin(razón = :cursor) ⇒ Objeto

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.

Marcar la conexión como fijada por el motivo dado.

Parámetros:

  • motivo (Símbolo) (por defecto: :cursor)

    La razón para fijar (:cursor o :transacción). Por defecto, se usa :cursor para compatibilidad con versiones anteriores.

Desde:

  • 2.0.0



194
195
196
# Archivo 'lib/mongo/server/connection.rb', línea 194

def alfiler(motivo = :cursor)
  @pin_reasons << motivo
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.

Haz ping en la conexión para ver si el servidor responde a los comandos. Esto no bloquea en el lado del servidor.

Ejemplos:

Haz un ping a la conexión.

connection.ping

Devuelve:

  • (true, false)

    Si el servidor está aceptando conexiones.

Desde:

  • 2.1.0



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

def ping
  ensure_connected hacer |enchufe|
    respuesta = add_server_diagnostics hacer
      enchufe.guardar(PING_OP_MSG_BYTES)
      protocolo::Mensaje.deserializar(enchufe, max_message_size)
    end
    respuesta.Documentos[0][Operación::Resultado::OK] == 1
  end
end

#¿fijado?Booleano

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.

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 ] Si la conexión está fijada.

Devuelve:

  • (booleano)

Desde:

  • 2.0.0



184
185
186
# Archivo 'lib/mongo/server/connection.rb', línea 184

def ¿fijado?
  !@pin_reasons.¿vacío?
end

#record_checkin!self

Registre la última hora de checkin.

Ejemplos:

Registra la hora de registro en este conexión.

connection.record_checkin!

Devuelve:

  • (self)

Desde:

  • 2.5.0



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

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



374
375
376
# Archivo 'lib/mongo/server/connection.rb', línea 374

def socket_timeout
  @timeout ||= opciones[timeout_del_socket]
end

#transportSymbol | nil

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.

Obtenga el tipo de transporte para esta conexión.

Devuelve:

  • (Symbol | nil)

    El tipo de transporte, :tcp o :unix, o nil si no hay ningún socket.

Desde:

  • 2.0.0



398
399
400
401
402
403
404
405
406
407
# Archivo 'lib/mongo/server/connection.rb', línea 398

def Transporte
  return nulo si @socket.nil?

  caso @socket
  cuando mongo::Socket::Unix
    :unix
  else
    :tcp
  end
end

#desanclar(motivo = :cursor) ⇒ Objeto

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.

Remover una chincheta de la conexión por el motivo dado.

Parámetros:

  • motivo (Símbolo) (por defecto: :cursor)

    La razón para desanclar (:cursor o :transacción). Por defecto, se establece en :cursor para garantizar la compatibilidad con versiones anteriores.

Desde:

  • 2.0.0



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

def unpin(motivo = :cursor)
  @pin_reasons.borrar(motivo)
end

#unpin_allObject

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.

Remueve todos los pines de la conexión.

Desde:

  • 2.0.0



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

def desanclar_todos
  @pin_reasons.borrar
end