Class: Mongo::Protocol::Message Abstract
- Hereda:
-
Objeto
- Objeto
- Mongo::Protocol::Message
- Incluye:
- Id, Serializadores
- Definido en:
- lib/mongo/protocolo/mensaje.rb
Overview
Una clase base que proporciona la funcionalidad requerida por todos los mensajes en el protocolo de conexión MongoDB. Proporciona un DSL mínimo para definir campos tipificados y habilitar la serialización y deserialización en la conexión.
Subclases conocidas directas
Comprimido, Obtener más, KillCursors, Mensaje, Consulta, Responder
Colapso delresumen constante
- BATCH_SIZE =
La constante de tamaño del lote.
' tamaño dellote '.freeze
- COLECCIÓN =
La constante de colección.
'recopilación '.freeze
- LIMIT =
La constante límite.
'limit'.freeze
- ORDENADO =
La constante ordenada.
'ordenado'.freeze
- Q =
La constante q.
'q'.freeze
- TAMAÑO MÁXIMO DEL MENSAJE =
Tamaño máximo de mensaje predeterminado de 48MB.
50331648.freeze
Colapso delresumen de atributos de instancia
-
#request_id ⇒ Fixnum
solo lectura
Devuelve el ID de solicitud para el mensaje.
Colapso delresumen del método de clase
-
.deserializar(io, tamaño máximo del mensaje = TAMAÑO MÁXIMO DEL MENSAJE, respuesta esperada a = nula, opciones = {}) ⇒ Mensaje
privada
Desserializa mensagens de um fluxo de E/S.
-
.deserialize_array(mensaje, io, campo, opciones = {}) ⇒ Mensaje
Deserializa una matriz de campos en un mensaje.
-
.deserialize_field(mensaje, io, campo, opciones = {}) ⇒ Mensaje
Deserializa un solo campo en un mensaje.
-
.deserialize_header(io) ⇒ Matriz<Fixnum>
Deserializa la cabecera del mensaje.
-
.campo(nombre, tipo, multi = falso) ⇒ NilClass
Un método para declarar un campo de mensaje.
-
.campos ⇒ Entero
Un método de clase para obtener los campos de una clase de mensaje.
Colapso del resumen del método de instancia
-
#==(otro) ⇒ verdadero, falso (también: #eql?)
Prueba la igualdad entre dos mensajes de protocolo de cable comparando valores de clase y campo.
-
#hash ⇒ Fixnum
Crea un hash a partir de los valores de los campos de un mensaje.
-
#inicializar(*args) ⇒ Mensaje
constructor
:nodoc:.
- #maybe_add_server_api(server_api) ⇒ Objeto
-
#perhaps_compress(compresor, zlib_compression_level = nil) ⇒ self
privada
Comprima el mensaje, si lo admite el protocolo de cable utilizado y si el comando que se envía permite la compresión.
-
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
Posiblemente descifre este mensaje con libmongocrypt.
-
#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg
Posiblemente cifre este mensaje con libmongocrypt.
-
#maybe_inflate ⇒ Protocol::Message
privada
Inflar un mensaje si está comprimido.
-
#número_devuelto ⇒ 0
Valor devuelto por número predeterminado para los mensajes de protocolo.
-
#¿respondible? ⇒ falso
El valor predeterminado para los mensajes es no requerir una respuesta después de enviar un mensaje al servidor.
-
#serializar(buffer = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ Cadena (también: #to_s)
Serializa el mensaje en bytes que pueden enviarse por cable.
-
#set_request_id ⇒ Fixnum
Genera un id de solicitud para un mensaje.
Métodos incluidos de Id
Detalles del constructor
#inicializar(*args) ⇒ Mensaje
:nodoc:
79 80 81 |
# Archivo 'lib/mongo/protocol/message.rb', línea 79 def inicializar(*args) # :nodoc: set_request_id end |
Detalles de los atributos de instancia
#request_id ⇒ Fixnum (solo lectura)
Devuelve el ID de solicitud para el mensaje.
86 87 88 |
# Archivo 'lib/mongo/protocol/message.rb', línea 86 def id de solicitud @request_id end |
Detalles del método de clase
.deserializar(io, tamaño máximo del mensaje = TAMAÑO MÁXIMO DEL MENSAJE, respuesta esperada a = nula, opciones = {}) ⇒ Mensaje
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Desserializa mensagens de um fluxo de E/S.
Este método devuelve mensajes descomprimidos (es decir, si el mensaje en el cable era OP_COMPRESSED, este método normalmente devolvería el mensaje OP_MSG que es el resultado de la descompresión).
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 |
# Archivo 'lib/mongo/protocol/message.rb', línea 238 def yo.deserializar(io, = TAMAÑO MÁXIMO DEL MENSAJE, respuesta esperada a = nulo, = {} ) # io suele ser una instancia de Mongo::Socket, que admite el Opción de tiempo de espera. Para compatibilidad con quienquiera que llame a esto # método con algún otro objeto similar a IO, pasa opciones solo cuando # no están vacíos. = .segmento(:timeout, :tiempo de espera del socket) Si .¿vacío? fragmento = io.Lea(16) else fragmento = io.Lea(16, **) end buf = BSON::Búfer de bytes.Nuevo(fragmento) longitud, _request_id, respuesta_a, _op_code = deserializar_encabezado(buf) # Protección contra posibles ataques de denegación de servicio (DOS) de intermediario. Ver #CONDUCTORES-276. Si longitud > ( || TAMAÑO MÁXIMO DEL MENSAJE) propagar Error::Tamaño máximo del mensaje.Nuevo() end # Protección contra devolver la respuesta a una solicitud anterior. Consultá #RUBY-1117 Si respuesta esperada a && respuesta_a != respuesta esperada a propagar Error::UnexpectedResponse.Nuevo(respuesta esperada a, respuesta_a) end Si .¿vacío? fragmento = io.Lea(longitud - 16) else fragmento = io.Lea(longitud - 16, **) end buf = BSON::Búfer de bytes.Nuevo(fragmento) = Registro.Obtener(_op_code).asignar .Enviar(:campos).cada hacer |Campo| Si Campo[:multi] deserializar_matriz(, buf, Campo, ) else deserializar_campo(, buf, Campo, ) end end Si .is_a?(Msg) .corrección después de la deserialización end .tal vez_inflar end |
.deserialize_array(mensaje, io, campo, opciones = {}) ⇒ Mensaje
Deserializa un arreglo de campos en un mensaje
El número de elementos en la matriz debe estar descrito por un campo previamente deserializado especificado en la clase por el campo dsl bajo la clave :multi
432 433 434 435 436 437 |
# Archivo 'lib/mongo/protocol/message.rb', línea 432 def yo.deserializar_matriz(, io, Campo, = {}) elementos = [] count = .obtención de variable de instancia(Campo[:multi]) count.veces { elementos << Campo[:tipo].deserializar(io, ) } .conjunto_de_variables_de_instancia(Campo[:nombre], elementos) end |
.deserialize_field(mensaje, io, campo, opciones = {}) ⇒ Mensaje
Deserializa un solo campo en un mensaje
450 451 452 453 454 455 |
# Archivo 'lib/mongo/protocol/message.rb', línea 450 def yo.deserializar_campo(, io, Campo, = {}) .conjunto_de_variables_de_instancia( Campo[:nombre], Campo[:tipo].deserializar(io, ) ) end |
.deserialize_header(io) ⇒ Matriz<Fixnum>
Deserializa el encabezado del mensaje
388 389 390 |
# Archivo 'lib/mongo/protocol/message.rb', línea 388 def yo.deserializar_encabezado(io) Encabezado.deserializar(io) end |
.campo(nombre, tipo, multi = falso) ⇒ NilClass
Un método para declarar un campo de mensaje
407 408 409 410 411 412 413 414 415 |
# Archivo 'lib/mongo/protocol/message.rb', línea 407 def yo.Campo(Nombre, tipo, multi = false) campos << { :nombre => "@#{name}".interno, :tipo => tipo, :multi => multi } lector de atributos Nombre end |
.campos ⇒ Entero
Un método de clase para obtener los campos de una clase de mensaje
340 341 342 |
# Archivo 'lib/mongo/protocol/message.rb', línea 340 def yo.campos @campos ||= [] end |
Detalles del método de instancia
#==(otro) ⇒ verdadero, falso También conocido como: eql?
Prueba la igualdad entre dos mensajes de protocolo de cable comparando valores de clase y campo.
295 296 297 298 299 300 301 302 |
# Archivo 'lib/mongo/protocol/message.rb', línea 295 def ==(otros) return false Si yo.clase != otros.clase campos.¿todo? hacer |Campo| Nombre = Campo[:nombre] obtención de variable de instancia(Nombre) == otros.obtención de variable de instancia(Nombre) end end |
#hash ⇒ Fixnum
Crea un hash a partir de los valores de los campos de un mensaje.
308 309 310 |
# Archivo 'lib/mongo/protocol/message.rb', línea 308 def hash campos.map { |Campo| obtención de variable de instancia(Campo[:nombre]) }.hash end |
#perhaps_add_server_api(servidor_api) ⇒ Objeto
173 174 175 |
# Archivo 'lib/mongo/protocol/message.rb', línea 173 def tal vez_agregar_api_del_servidor(API del servidor) propagar Error::ServerApiNotSupported, Los parámetros de la API del servidor no se pueden enviar a3.6 servidores MongoDB anteriores a. Elimine el parámetro :server_api de las opciones del cliente o utilice MongoDB 3.6 o una versión posterior. end |
#perhaps_compress(compresor, zlib_compression_level = nil) ⇒ self
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Comprime el mensaje si el protocolo de transmisión lo permite y el comando enviado lo permite. De lo contrario, devuelve "self".
112 113 114 |
# Archivo 'lib/mongo/protocol/message.rb', línea 112 def tal vez_comprimir(compresor, zlib_compression_level = nulo) yo end |
#maybe_decrypt(context) ⇒ Mongo::Protocol::Msg
Posiblemente descifre este mensaje con libmongocrypt.
152 153 154 155 156 157 158 |
# Archivo 'lib/mongo/protocol/message.rb', línea 152 def tal vez_descifrar(context) # TODO determinar si deberíamos estar desencriptando datos provenientes de pre-4.2 # servidores, posiblemente utilizando protocolos de cable heredados. De ser así, necesitamos # para implementar descifrado para esos protocolos de conexión como nuestros actuales # El código de cifrado/descifrado es específico de OP_MSG. yo end |
#maybe_encrypt(connection, context) ⇒ Mongo::Protocol::Msg
Posiblemente cifre este mensaje con libmongocrypt.
168 169 170 171 |
# Archivo 'lib/mongo/protocol/message.rb', línea 168 def tal vez_encriptar(conexión, context) # No hacer nada si la subclase Message no ha implementado este método yo end |
#perhaps_inflate ⇒ Protocolo::Mensaje
Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.
Inflar un mensaje si está comprimido.
142 143 144 |
# Archivo 'lib/mongo/protocol/message.rb', línea 142 def tal vez_inflar yo end |
#número_devuelto ⇒ 0
Valor devuelto por número predeterminado para los mensajes de protocolo.
326 |
# Archivo 'lib/mongo/protocol/message.rb', línea 326 def número_devuelto; 0; end |
#¿respondible? ⇒ falso
El valor predeterminado para los mensajes es no requerir una respuesta después de enviar un mensaje al servidor.
97 98 99 |
# Archivo 'lib/mongo/protocol/message.rb', línea 97 def ¿respondible? false end |
#serializar(buffer = BSON::ByteBuffer.new, max_bson_size = nil, bson_overhead = nil) ⇒ Cadena También conocido como: to_s
Serializa el mensaje en bytes que se pueden enviar por cable.
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# Archivo 'lib/mongo/protocol/message.rb', línea 201 def fabricar en serie(buffer = BSON::Búfer de bytes.Nuevo, tamaño máximo de bson = nulo, bson_overhead = nulo) tamaño máximo = Si tamaño máximo de bson && bson_overhead tamaño máximo de bson + bson_overhead elsif tamaño máximo de bson tamaño máximo de bson else nulo end Inicio = buffer.longitud serializar_encabezado(buffer) campos_serializados(buffer, tamaño máximo) buffer.reemplazar_int32(Inicio, buffer.longitud - Inicio) end |
#set_request_id ⇒ Fixnum
Genera un ID de solicitud para un mensaje.
317 318 319 |
# Archivo 'lib/mongo/protocol/message.rb', línea 317 def set_request_id @request_id = yo.clase.siguiente_id end |