Clase: Mongo::Server::Monitor::Connection Privada

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

Overview

Esta clase forma parte de una API privada. Debe evitar usarla siempre que sea posible, ya que podría eliminarse o modificarse en el futuro.

Esta clase modela las conexiones del monitor y su comportamiento.

Desde:

  • 2.0.0

Subclases conocidas directas

PushMonitor::Conexión

Resumen constante

Constantes incluidas desde Loggable

Registrable::PREFIX

Colapso delresumen de atributos de instancia

Atributos heredados de ConnectionCommon

#compressor, #pid

Colapso del resumen del método de instancia

Métodos incluidos en Loggable

#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 monitoreo 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::Dirección)

    La dirección a la que es dirigida la conexión.

  • opciones (Hash) (predeterminado: {})

    Las opciones de conexión.

Opciones Hash(opciones):

  • :app_metadata (Mongo::Servidor::Monitor::AppMetadata)

    Metadatos para el protocolo de enlace. Si faltan o son nulos, no se realizará el protocolo de enlace. Aunque una instancia de Mongo::Server::AppMetadata también funcionará, las conexiones de monitorización deben usar instancias de Mongo::Server::Monitor::AppMetadata para evitar la negociación SCRAM con el servidor, ya que los sockets de monitorización no se autentican.

  • :compresores (Matriz<String>)

    Una lista de posibles compresores, en orden de preferencia. El controlador elige el primer compresor compatible con el servidor. Actualmente, el controlador solo admite 'zstd', 'snappy' y 'zlib'.

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

    El tiempo de espera, en segundos, que se utiliza para las operaciones de red. Este tiempo de espera se utiliza para todas las operaciones de socket, no solo para las llamadas de conexión, al contrario de lo que su nombre indica.

Desde:

  • 2.0.0



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

def inicializar(dirección, opciones = {})
  @DIRECCIÓN = dirección
  @opciones = opciones.dup.freeze
  a no ser 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 retorno La dirección a la que conectarse.

Devuelve:

Desde:

  • 2.0.0



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

def dirección
  @DIRECCIÓN
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:

  • (Hash)

    opciones Las opciones pasadas.

Desde:

  • 2.0.0



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

def opciones
  @opciones
end

#server_connection_idEntero (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 identificador de conexión del servidor.

Devuelve:

  • (Entero)

    server_connection_id El identificador de conexión del servidor.

Desde:

  • 2.0.0



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

def id_de_conexión_del_servidor
  @id_de_conexión_del_servidor
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::Documento)

    Documento que debe enviarse a un servidor para verificar 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/server/monitor/connection.rb', línea 229

def check_document
  API del servidor = @app_metadata.API del servidor || opciones[:server_api]
  doc = Si hello_ok? || API del servidor
    _doc = HELLO_DOC
    Si API del servidor
      _doc = _doc.unir(Utils.API del servidor de transformación(API del servidor))
    end
    _doc
  else
    LEGADO_HOLA_DOC
  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.unir(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 estableciendo un socket si anteriormente no existía ninguno.

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:

Conectarse al host.

connection.connect!

Devuelve:

  • (verdadero) -

    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/server/monitor/connection.rb', línea 158

def ¡conectar!
  Si @socket
    propagar ArgumentError, 'La conexión de monitoreo ya está conectada'
  end

  @socket = agregar_diagnósticos_del_servidor hacer
    dirección.Socket(tiempo de espera del socket, opciones_ssl.unir(
      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 nulo si el cierre se realizó correctamente.

Nota:

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

Desconectar la conexión.

Ejemplos:

Desconectarse del host.

connection.disconnect!

Devuelve:

  • (verdadero) -

    Si la desconexión se realizó correctamente.

Desde:

  • 2.0.0



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

def ¡desconectar!(opciones = nulo)
  Si Socket
    Socket.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/server/monitor/connection.rb', línea 97

def despacho(Mensaje)
  bytes de despacho(Mensaje.fabricar en serie.a_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 preserializado y devuelve el resultado.

Parámetros:

  • bytes (Cadena) -

    El mensaje serializado a enviar.

  • opta (Hash)

    un conjunto personalizable de opciones

Opciones Hash (**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/server/monitor/connection.rb', línea 109

def bytes de despacho(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 un comando de protocolo de enlace al host conectado y valida la respuesta.

Devuelve:

  • (BSON::Documento)

    Respuesta del servidor al protocolo de enlace

Aumentos:

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/server/monitor/connection.rb', línea 197

def handshake!
  Comando = comando de apretón de manos(
    documento de apretón de manos(
      @app_metadata,
      API del servidor: opciones[:server_api]
    )
  )
  carga útil = Comando.fabricar en serie.a_s
  Mensaje = bytes de despacho(carga útil)
  resultado = Operación::Resultado.Nuevo(Mensaje)
  resultado.validate!
  respuesta = resultado.Documentos.primera
  set_compressor!(respuesta)
  set_hello_ok!(respuesta)
  @id_de_conexión_del_servidor = respuesta['Id de conexión']
  respuesta
rescate => Excª
  msg = "Nose pudo establecer el protocolo de enlacecon #{ address }"
  Utils.advertencia_bg_excepción(msg, Excª,
    logger: opciones[:logger],
    prefijo_de_registro: opciones[:prefijo_de_registro],
    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 (Hash)

    un conjunto personalizable de opciones

Opciones Hash (**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/server/monitor/connection.rb', línea 130

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

  agregar_id_de_conexión_del_servidor hacer
    agregar_diagnósticos_del_servidor hacer
      Protocolo::Mensaje.deserializar(Socket,
        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 del socket de monitoreo.

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:

  • (Flotar) -

    El tiempo de espera del socket en segundos.

Desde:

  • 2.4.3



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

def tiempo de espera del socket
  opciones[:tiempo de espera de conexión] || Servidor::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/server/monitor/connection.rb', línea 116

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

  agregar_id_de_conexión_del_servidor hacer
    agregar_diagnósticos_del_servidor hacer
      Socket.guardar(bytes)
    end
  end
end