Clase: Mongo::servidor::supervisar::Connection Privado

Hereda:
ConnectionCommon Mostrar todo
Incluye:
Registrable
Definido en:
lib/mongo/servidor/monitor/conexión.rb

Overview

Esta clase forma parte de una API privada. Evita usar esta clase si es posible, ya que puede ser eliminada o modificada en el futuro.

Esta clase modela las conexiones de monitoreo y su comportamiento.

Desde:

  • 2.0.0

Subclases conocidas directas

PushMonitor::Connection

Resumen constante

Constantes incluidas desde Loggable

Registrable::PREFIX

Resumen de atributos de la instancia colapsar

Atributos heredados de ConnectionCommon

#compressor, #pid

Resumen del método de instancia colapsar

Métodos incluidos desde Registrable

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

Métodos heredados de ConnectionCommon

#¿conectado?, #comando_de_apretón_de_manos, #documento_de_apretón_de_manos

Detalles del constructor

#inicializar(dirección, opciones = {}) ⇒ Conexión

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:

Las conexiones de supervisión no se autentican.

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

El constructor no realiza ninguna E/S (y por lo tanto no crea sockets ni protocolos de enlace); llame al método connect! en el objeto de conexión para crear la conexión de red.

Parámetros:

  • dirección (Mongo::Address)

    La dirección para la que se utiliza la conexión.

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

    Las opciones de conexión.

Opciones Hash (options):

  • :app_metadata (Mongo::servidor::supervisar::AppMetadata)

    Metadatos para usar en el intercambio de señales. Si falta o es nulo, no se realizará el intercambio de señales. Aunque también funcionará una instancia de Mongo::Server::AppMetadata, las conexiones de supervisión están destinadas a usar instancias de Mongo::Server::Monitor::AppMetadata para omitir la negociación SCRAM con el servidor, ya que los sockets de supervisión no se autentican.

  • :compresores (Matriz<String>)

    Una lista de posibles compresores para utilizar, en orden de preferencia. El controlador elige el primer compresor que también sea compatible con el servidor. Actualmente, el driver solo admite ‘zstd’, ‘snappy’ y ‘zlib’.

  • :tiempo de espera de conexión (Flotante)

    El tiempo de espera, en segundos, a utilizar para las operaciones de red. Este tiempo de espera se utiliza para todas las operaciones de socket en lugar de sólo llamadas de conexión, contrariamente a lo que implica el nombre,

Desde:

  • 2.0.0



58
59
60
61
62
63
64
65
66
67
68
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 58

def inicializar(dirección, opciones = {})
  @address = dirección
  @options = opciones.dup.freeze
  a menos que @app_metadata = opciones[:app_metadata]
    propagar ArgumentError, 'Los metadatos de la aplicación son obligatorios'
  end
  @socket = nulo
  @pid = Proceso.pid
  @compressor = nulo
  @hello_ok = false
end

Detalles de los atributos de instancia

#direcciónMongo::Address (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.

Dirección de devoluciones La dirección a la que conectarse.

Devuelve:

Desde:

  • 2.0.0



74
75
76
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 74

def dirección
  @address
end

#opcionesHash (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.

Devuelve opciones Las opciones pasadas.

Devuelve:

  • (encriptada)

    opciones Las opciones introducidas.

Desde:

  • 2.0.0



71
72
73
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 71

def opciones
  @options
end

#id_conexión_servidorEntero (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.

Devuelve server_connection_id El id de conexión del servidor.

Devuelve:

  • (Número entero)

    server_connection_id El ID de conexión del servidor.

Desde:

  • 2.0.0



90
91
92
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 90

def server_connection_id
  @server_connection_id
end

Detalles del método de instancia

#check_documentBSON::Document

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

Compilar un documento que se debe usar para la verificación de la conexión.

Devuelve:

  • (BSON::Document)

    Documento que debe ser enviado a un servidor para comprobar la conexión.

Desde:

  • 2.0.0



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 229

def check_document
  server_api = @app_metadata.server_api || opciones[API del servidor]
  doc = si hello_ok? || server_api
    _doc = HELLO_DOC
    si server_api
      _doc = _doc.fusionar(Utils.transform_server_api(server_api))
    end
    _doc
  else
    HELLO_DOC_ANTIGUO
  end
  # Los compresores deben configurarse para mantener el estado de compresión correcto
  # en la descripción del servidor. Ver RUBY-2427
  si compresores = opciones[:compresores]
    doc = doc.fusionar(compresión: compresores)
  end
  doc
end

#¡conectar!true

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:

Este método muta la clase de conexión al establecer 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



158
159
160
161
162
163
164
165
166
167
168
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 158

def ¡conectar!
  si @socket
    propagar ArgumentError, 'Conexión de supervisión ya conectada'
  end

  @socket = add_server_diagnostics hacer
    dirección.enchufe(socket_timeout, opciones_ssl.fusionar(
      connection_address: dirección, monitor: true))
  end
  true
end

#¡desconectar!(opciones = nulo) ⇒ verdadero

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:

Este método muta la conexión estableciendo el socket en nil si el cierre tuvo éxito.

Nota:

Este método acepta un argumento de opciones para compatibilidad con Server::Connections. Sin embargo, se ignoran todas las opciones.

Desconecte la conexión.

Ejemplos:

Desconéctate del host.

connection.disconnect!

Devuelve:

  • (cierto)

    Si la desconexión tuvo éxito.

Desde:

  • 2.0.0



184
185
186
187
188
189
190
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 184

def ¡desconectar!(opciones = nulo)
  si enchufe
    enchufe.Cerrar rescate nulo
    @socket = nulo
  end
  true
end

#dispatch(message) ⇒ Protocol::Message

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

Envía un mensaje y devuelve el resultado.

Parámetros:

Devuelve:

Desde:

  • 2.0.0



97
98
99
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 97

def enviar(mensaje)
  despacho_bytes(mensaje.serializar.to_s)
end

#dispatch_bytes(bytes, **opts) ⇒ Protocol::Message

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

Envía un mensaje pre-serializado y devuelve el resultado.

Parámetros:

  • bytes (string)

    El mensaje serializado que se debe enviar.

  • opta (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • :tiempo de espera del socket de lectura (Numérico)

    El tiempo de espera que se utilizará para cada operación de lectura.

Devuelve:

Desde:

  • 2.0.0



109
110
111
112
113
114
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 109

def despacho_bytes(bytes, **opta)
  escritura_bytes(bytes)
  read_response(
    socket_timeout: opta[:tiempo de espera del socket de lectura],
  )
end

#handshake!BSON::Document

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

Envía el comando de saludo al host conectado y valida la respuesta.

Devuelve:

  • (BSON::Document)

    Respuesta de apretón de manos del servidor

Aumenta:

Desde:

  • 2.0.0



197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 197

def handshake!
  Comando = handshake_command(
    documento_handshake(
      @app_metadata,
      server_api: opciones[API del servidor]
    )
  )
  payload = Comando.serializar.to_s
  mensaje = despacho_bytes(payload)
  Resultado = Operación::Resultado.Nuevo(mensaje)
  Resultado.validate!
  respuesta = Resultado.Documentos.primero
  set_compressor!(respuesta)
  set_hello_ok!(respuesta)
  @server_connection_id = respuesta['Id de conexión']
  respuesta
rescate => Excª
  msg = "Nose pudo establecer el protocolo de enlacecon #{ address }"
  Utils.warn_bg_exception(msg, Excª,
    logger: opciones[:logger],
    prefijo_de_registro: opciones[log_prefix],
    bg_error_backtrace: opciones[:bg_error_backtrace],
  )
  propagar
end

#read_response(**opts) ⇒ Objeto

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

Parámetros:

  • opta (encriptada)

    un conjunto personalizable de opciones

Hash de opciones (**opts):

  • :tiempo de espera del socket (Numérico)

    El tiempo de espera que se utilizará para cada operación de lectura.

Desde:

  • 2.0.0



130
131
132
133
134
135
136
137
138
139
140
141
142
143
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 130

def read_response(**opta)
  a menos que ¿conectado?
    propagar ArgumentError, "Intentando leer en una conexión no conectada #{self}"
  end

  add_server_connection_id hacer
    add_server_diagnostics hacer
      protocolo::Mensaje.deserializar(enchufe,
        protocolo::Mensaje::TAMAÑO MÁXIMO DEL MENSAJE,
        nulo,
        **opta)
    end
  end
end

#socket_timeoutFlotante

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 el tiempo de espera de confirmación del socket de supervisión.

Tenga en cuenta que las conexiones de monitorización utilizan el valor de tiempo de espera de conexión como valor de tiempo de espera del socket. Consulte la especificación de detección y monitorización del servidor para obtener más información.

Devuelve:

  • (Float)

    El tiempo de espera del socket en segundos.

Desde:

  • 2.4.3



85
86
87
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 85

def socket_timeout
  opciones[:tiempo de espera de conexión] || Server::CONNECT_TIMEOUT
end

#write_bytes(bytes) ⇒ Objeto

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

Desde:

  • 2.0.0



116
117
118
119
120
121
122
123
124
125
126
Archivo 'lib/mongo/servidor/monitor/connection.rb', línea 116

def escritura_bytes(bytes)
  a menos que ¿conectado?
    propagar ArgumentError, "Intentandodespachar en una conexión no conectada #{self}"
  end

  add_server_connection_id hacer
    add_server_diagnostics hacer
      enchufe.guardar(bytes)
    end
  end
end