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, #interrupt_socket

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
110
# Archivo 'lib/mongo/server/connection.rb', línea 90

def inicializar(Server, opciones = {})
  super()
  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



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

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



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

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



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

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



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

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



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/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? && !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



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

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



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

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



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
345
# 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
    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



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

def error?
  !!@error
end

#¡interrumpido!objeto

Marcar la conexión como interrumpida.

Desde:

  • 2.0.0



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

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



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

def desanclar_todos
  @pin_reasons.borrar
end