Classe: Mongo::Servidor::Monitor::Conexão privada

Herda:
ConnectionCommon mostrar tudo
Inclui:
Logável
Definido em:
build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb

Visão geral

Esta classe faz parte de uma API privada. Evite usar essa classe, se possível, pois ela pode ser removida ou alterada no futuro.

Esta classe modela as conexões do monitor e seu comportamento.

Desde:

  • 2.0.0

Subclasses conhecidas diretas

PushMonitor::Connection

Resumo constante

Constantes incluídas do Loggable

Loggable::Prefix

Recolhimento do Resumo do atributo de instância

Atributos herdados de ConnectionCommon

#compressor, #pid

Recolhimento do Resumo do método de instância

Métodos incluídos no Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger

Métodos herdados de ConnectionCommon

#connected?, #handshake_command, #handshake_document

Detalhes do construtor

#inicializar(endereço, opções = {}) ➤ Conexão

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

O monitoramento de conexões não autentica.

Cria um novo objeto de conexão para o endereço de destino especificado com as opções especificadas.

O construtor não executa nenhuma E/S (e, portanto, não cria soquetes nem handshakes); chamada conectada! no objeto de conexão para criar a conexão de rede.

Parâmetros:

  • endereço (Mongo::Address)

    O endereço para o qual é a conexão.

  • opções (Hash) (padrão para: {})

    As opções de conexão.

Hash de opções (opções):

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

    Metadados a serem usados para a negociação. Se ausente ou nulo, o handshake não será realizado. Embora uma instância Mongo::Server::AppMetadata também funcione, as conexões de monitoramento destinam-se a usar instâncias Mongo::Server::AppMetadata para omitir a negociação SCRAM com o servidor, pois os soquetes de monitoramento não autenticam.

  • :compressors (Array<String>)

    Uma lista de possíveis compressores a serem usados, em ordem de preferência. O driver escolhe o primeiro compressor que também é suportado pelo servidor. Atualmente, o driver suporta apenas 'zstd', 'snappy' e 'zlib'.

  • :connect_timeout (Flutuante)

    O timeout, em segundos, a ser usado para operações de rede. Esse tempo limite é usado para todas as operações de soquete em vez de conectar apenas chamadas, ao contrário do que o nome indica,

Desde:

  • 2.0.0



58
59
60
61
62
63
64
65
66
67
68
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 58

def inicializar(endereço, opções = {})
  @address = endereço
  @opções = opções.dup.congelar
  a menos que @app_metadata = opções[:app_metadata]
    aumentar ArgumentError, ' Osmetadados do aplicativo são obrigatórios'
  end
  @socket = nada
  @pid = Processo.PID
  @compressor = nada
  @hello_ok = false
end

Detalhes do atributo da instância

#endereçoMongo::Endereço (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna endereço O endereço ao qual se conectar.

Retorna:

Desde:

  • 2.0.0



74
75
76
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 74

def endereço
  @address
end

#opçõesHash (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna opções As opções passadas.

Retorna:

  • (Hash)

    opções O passado em opções.

Desde:

  • 2.0.0



71
72
73
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 71

def opções
  @opções
end

#server_connection_id ➤ Inteiro (somente leitura)

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna server_connection_id O ID de conexão do servidor.

Retorna:

  • (Inteiro)

    server_connection_id A ID de conexão do servidor .

Desde:

  • 2.0.0



90
91
92
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 90

def server_connection_id
  @server_connection_id
end

Detalhes do método de instância

#check_document ➤ BSON::Document

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Crie um documento que deva ser usado para verificação de conexão.

Retorna:

  • (BSON::Document)

    Documento que deve ser enviado a um servidor para verificação de conexão.

Desde:

  • 2.0.0



229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 229

def check_document
  server_api = @app_metadata.server_api || opções[:server_api]
  doc = se hello_ok? || server_api
    _doc = HELLO_DOC
    se server_api
      _doc = _doc.mesclar(Utilidades.transform_server_api(server_api))
    end
    _doc
  mais
    LGACY_HELLO_DOC
  end
  # compressores devem ser definidos para manter o status correto de compressão
  # na descrição do servidor. Consulte RUBI-2427
  se compressors = opções[:compressors]
    doc = doc.mesclar(compressão: compressors)
  end
  doc
end

#connect!verdadeiro

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

Este método altera a classe de conexão definindo um soquete se anteriormente não existisse.

Estabelece uma conexão de rede com o endereço de destino.

Se a conexão já estiver estabelecida, esse método não fará nada.

Exemplos:

Conecte-se ao host.

connection.connect!

Retorna:

  • (verdadeiro)

    Se a conexão foi bem-sucedida.

Desde:

  • 2.0.0



158
159
160
161
162
163
164
165
166
167
168
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 158

def Conecte-se!
  se @socket
    aumentar ArgumentError, ' Aconexão de monitoramento já está conectada'
  end

  @socket = add_server_diagnóstico fazer
    endereço.soquete(socket_timeout, ssl_options.mesclar(
      connection_address: endereço, monitorar: true))
  end
  true
end

#desconectar!(opções = nil) ➤ verdadeiro

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

Esse método muta a conexão definindo o soquete como nulo se o fechamento for bem-sucedido.

Observação:

Este método aceita um argumento de opções para compatibilidade com Servidor::Conexões. No entanto, todas as opções são ignoradas.

Desconecte a conexão.

Exemplos:

Desconecte-se do host.

connection.disconnect!

Retorna:

  • (verdadeiro)

    Se a desconexão for bem-sucedida.

Desde:

  • 2.0.0



184
185
186
187
188
189
190
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 184

def desconecte-se!(opções = nada)
  se soquete
    soquete.Fechar salvar nada
    @socket = nada
  end
  true
end

#dispatch(message) ⇒ Protocol::Message

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Envia uma mensagem e retorna o resultado.

Parâmetros:

Retorna:

Desde:

  • 2.0.0



97
98
99
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 97

def despacho(mensagem)
  despacho_bytes(mensagem.serializar.to_s)
end

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

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Envia uma mensagem pré-serializada e retorna o resultado.

Parâmetros:

  • bytes (string)

    A mensagem serializada a ser enviada.

  • opciona (Hash)

    um conjunto personalizável de opções

Hash de opções (**opts):

  • :read_socket_timeout (Numérico)

    O tempo limite a ser usado para cada operação de leitura.

Retorna:

Desde:

  • 2.0.0



109
110
111
112
113
114
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 109

def despacho_bytes(bytes, **opciona)
  write_bytes(bytes)
  read_response(
    socket_timeout: opciona[:read_socket_timeout],
  )
end

#handshake!BSON::Document

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Envie o comando de handshake para o host conectado e valide a resposta.

Retorna:

  • (BSON::Document)

    Resposta de handshake do 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
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 197

def aperto de mão!
  comando = handshake_command(
    handshake_document(
      @app_metadata,
      server_api: opções[:server_api]
    )
  )
  Carga útil = comando.serializar.to_s
  mensagem = despacho_bytes(Carga útil)
  Resultado = (operação)::Resultado.Novo(mensagem)
  Resultado.validar!
  responder = Resultado.documentos.primeiro
  set_compressor!(responder)
  set_hello_ok!(responder)
  @server_connection_id = responder['connectionId']
  responder
salvar => exc
  mensagem = "Falha ao lidar com #{endereço}"
  Utilidades.write_bg_exceção(mensagem, exc,
    registrador: opções[:logger],
    log_prefix: opções[:log_prefix],
    bg_error_backtrace: opções[:bg_error_backtrace],
  )
  aumentar
end

#read_response(**opts) ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Parâmetros:

  • opciona (Hash)

    um conjunto personalizável de opções

Hash de opções (**opts):

  • :socket_timeout (Numérico)

    O tempo limite a ser usado para cada operação de leitura.

Desde:

  • 2.0.0



130
131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 130

def read_response(**opciona)
  a menos que conectado?
    aumentar ArgumentError, "Tentando ler em uma conexão desconectada #{self}"
  end

  add_server_connection_id fazer
    add_server_diagnóstico fazer
      protocolo::mensagem.desserializar(soquete,
        protocolo::mensagem::MAX_message_SIZE,
        nada,
        **opciona)
    end
  end
end

#socket_timeout ➤ Flutuante

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retorna o tempo limite do soquete de monitoramento.

Observe que o monitoramento de conexões usa o valor de tempo limite de conexão como valor de tempo limite de soquete. Consulte a especificação Descoberta e monitoramento do servidor MongoDB para obter detalhes.

Retorna:

  • (Flutuante)

    O tempo limite do soquete em segundos.

Desde:

  • 2.4.3



85
86
87
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 85

def socket_timeout
  opções[:connect_timeout] || Servidor::CONNECT_TIMEOUT
end

#write_bytes(bytes) ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Desde:

  • 2.0.0



116
117
118
119
120
121
122
123
124
125
126
# File 'build/ruby-driver-v2.19/lib/mongo/server/monitor/connection.rb', linha 116

def write_bytes(bytes)
  a menos que conectado?
    aumentar ArgumentError, "Tentando despachar em uma conexão desconectada #{self}"
  end

  add_server_connection_id fazer
    add_server_diagnóstico fazer
      soquete.escrever(bytes)
    end
  end
end