Classe: Mongo::Servidor::Monitor::Conexão privada
- Herda:
-
ConnectionCommon
- Objeto
- ConnectionCommon
- Mongo::Servidor::Monitor::Conexão
- Inclui:
- Logável
- Definido em:
- lib/mongo/ servidor/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.
Resumo constante
Constantes incluídas do Loggable
Recolhimento do Resumo do atributo de instância
-
#endereço ➤ Mongo::Endereço
Somente leitura
privado
Endereço O endereço ao qual se conectar.
-
#opções ➤ Hash
Somente leitura
privado
Opções As opções passadas.
-
#server_connection_id ➤ Inteiro
Somente leitura
privado
Server_connection_id A ID de conexão do servidor.
Atributos herdados de ConnectionCommon
Recolhimento do Resumo do método de instância
-
#check_document ➤ BSON::Document
privado
Crie um documento que deva ser usado para verificação de conexão.
-
#connect! ➤ verdadeiro
privado
Estabelece uma conexão de rede com o endereço de destino.
-
#desconectar!(_options = nil) ➤ true
privado
Desconecte a conexão.
-
#dispatch(message) ⇒ Protocol::Message
privado
Envia uma mensagem e retorna o resultado.
-
#dispatch_bytes(bytes, **opts) ⇒ Protocol::Message
privado
Envia uma mensagem pré-serializada e retorna o resultado.
-
#handshake! ➤ BSON::Document
privado
Envie o comando de handshake para o host conectado e valide a resposta.
-
#inicializar(endereço, opções = {}) ➤ Conexão
construtor
privado
Cria um novo objeto de conexão para o endereço de destino especificado com as opções especificadas.
- #read_response(**opts) ➤ Objeto privado
-
#socket_timeout ➤ Flutuante
privado
Retorna o tempo limite do soquete de monitoramento.
- #write_bytes(bytes) ➤ Objeto privado
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.
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.
56 57 58 59 60 61 62 63 64 65 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 56 def inicializar(endereço, = {}) @address = endereço @opções = .dup.congelar aumentar ArgumentError, ' Osmetadados do aplicativo são obrigatórios' a menos que @app_metadata = [:app_metadata] @socket = nada @pid = Processo.PID @compressor = nada @hello_ok = false end |
Detalhes do atributo da instância
#endereço ➤ Mongo::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.
71 72 73 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 71 def endereço @address end |
#opções ➤ Hash (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.
68 69 70 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 68 def @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.
87 88 89 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 87 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.
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 224 def check_document server_api = @app_metadata.server_api || [:server_api] doc = se hello_ok? || server_api _doc = HELLO_DOC _doc = _doc.mesclar(Utilidades.transform_server_api(server_api)) se server_api _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 = [: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.
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.
151 152 153 154 155 156 157 158 159 160 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 151 def Conecte-se! aumentar ArgumentError, ' Aconexão de monitoramento já está conectada' se @socket @socket = add_server_diagnóstico fazer endereço.soquete(socket_timeout, .mesclar( connection_address: endereço, monitorar: true )) end true end |
#desconectar!(_options = nil) ⇒ true
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.
Esse método muta a conexão definindo o soquete como nulo se o fechamento for bem-sucedido.
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.
176 177 178 179 180 181 182 183 184 185 186 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 176 def desconecte-se!( = nada) se soquete começar soquete.Fechar salvar StandardError nada end @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.
94 95 96 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 94 def despacho() despacho_bytes(.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.
106 107 108 109 110 111 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 106 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.
193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 193 def aperto de mão! comando = handshake_command( handshake_document( @app_metadata, server_api: [:server_api] ) ) Carga útil = comando.serializar.to_s = despacho_bytes(Carga útil) Resultado = (operação)::Resultado.Novo() Resultado.validar! responder = Resultado.documentos.primeiro set_compressor!(responder) set_hello_ok!(responder) @server_connection_id = responder['connectionId'] responder salvar StandardError => e mensagem = "Falha ao lidar com #{endereço}" Utilidades.write_bg_exceção(mensagem, e, registrador: [:logger], log_prefix: [:log_prefix], bg_error_backtrace: [: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.
125 126 127 128 129 130 131 132 133 134 135 136 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 125 def read_response(**opciona) aumentar ArgumentError, "Tentando ler em uma conexão desconectada #{self}" a menos que conectado? 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.
82 83 84 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 82 def socket_timeout [: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.
113 114 115 116 117 118 119 120 121 |
# Arquivo 'lib/mongo/ servidor/monitor/connection.rb', linha 113 def write_bytes(bytes) aumentar ArgumentError, "Tentando despachar em uma conexão desconectada #{self}" a menos que conectado? add_server_connection_id fazer add_server_diagnóstico fazer soquete.escrever(bytes) end end end |