Classe: Mongo::Servidor::Conexão

Herda:
ConnectionBase mostrar tudo
Estendido por:
Encaminhável
Inclui:
ID, Monitoramento::publicável, Retryable
Definido em:
build/ruby-driver-v2.19/lib/mongo/server/connection.rb

Visão geral

Esta aula modela as conexões de soquete para servidores e seu comportamento.

Desde:

  • 2.0.0

Colapsode resumo constante

PING =
Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

O comando ping.

Desde:

  • 2.1.0

{ :ping => 1 }.congelar
PING_OP_MSG =
Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

O comando ping para um OP_MSG (versões do servidor >= 3.6).

Desde:

  • 2.5.0

{ :ping => 1, '$db' => Database::ADMIN }.congelar
PING_MSSAGE =
Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

Mensagem de ping.

Desde:

  • 2.1.0

protocolo::Query.Novo(Database::ADMIN, Database::Comando, Ping, :limit => -1)
PING_OP_MSG_MSSAGE =
Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

Mensagem de ping como OP_MSG (versões do servidor >= 3.6).

Desde:

  • 2.5.0

protocolo::Msg.Novo([], {}, PING_OP_MSG)
PING_BYTES =
Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

A mensagem de ping como bytes brutos.

Desde:

  • 2.1.0

PING_message.serializar.to_s.congelar
PING_OP_MSG_BYTES =
Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

A mensagem de ping OP_MSG como bytes brutos (versões do servidor >= 3.6).

Desde:

  • 2.5.0

PING_OP_MSG_MSSAGE.serializar.to_s.congelar

Constantes incluídas do Loggable

Loggable::Prefix

Constantes herdadas de ConnectionBase

Mongo::Server::ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE, Mongo::Server::ConnectionBase::MAX_BSON_COMMAND_OVERHEAD, Mongo::Server::ConnectionBase::REDUCED_MAX_BSON_SIZE

Recolhimento do Resumo do atributo de instância

Atributos incluídos no Monitoramento::publicável

#monitoring

Atributos herdados de ConnectionBase

#description, #options, #server

Atributos herdados de ConnectionCommon

#compressor, #pid

Recolhimento do Resumo do método de instância

Métodos incluídos do ID

incluído

Métodos incluídos no Retryable

#read_worker, #select_server, #write_worker

Métodos incluídos do monitoramento::publicável

#publish_cmap_event, #publish_event, #publish_sdam_event

Métodos incluídos no Loggable

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

Métodos herdados de ConnectionBase

#app_metadata, #dispatch, # generação, #service_id

Métodos herdados de ConnectionCommon

#handshake_command, #handshake_document

Detalhes do construtor

#inicializar(servidor, 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:

A conexão nunca deve ser diretamente instanciada fora de um servidor MongoDB.

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

O construtor não realiza nenhuma E/S (e, portanto, não cria soquetes, negociações nem autentica); chamada conectada! no objeto de conexão para criar a conexão de rede.

Exemplos:

Crie a conexão.

Connection.new(server)

Parâmetros:

  • Servidor (Mongo::Server)

    O servidor para o qual a conexão é.

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

    As opções de conexão.

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

  • :pipe (IO)

    O descritor de arquivo para o final de leitura do pipe para ouvir durante a chamada de sistema selecionada ao ler do soquete.

  • :generação (Inteiro)

    A geração desta conexão. A geração só deve ser especificada nesta opção quando não estiver no modo de balanceamento de carga e deve ser a geração do pool de conexões quando a conexão for criada. No modo de balanceamento de carga, a geração é definida na conexão após a conclusão da negociação.

  • :server_api (Hash)

    A versão da API do servidor solicitado. Esse hash pode ter os seguintes itens:

    • :version – string

    • :strict – boolean

    • :deprecation_errors – boolean

Desde:

  • 2.0.0



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 106

def inicializar(Servidor, opções = {})
  se Servidor.load_balancer? && opções[:generação]
    aumentar ArgumentError, "A geração não pode ser definida quando o servidor é um balancer de carga"
  end

  @id = Servidor.Next_connection_id
  @global_id = auto.classe.Next_id
  @monitoring = Servidor.Monitoramento
  @opções = opções.congelar
  @server = Servidor
  @socket = nada
  @last_checkin = nada
  @auth_mecanismo = nada
  @pid = Processo.PID
  @pinned = false

  publish_cmap_event(
    Monitoramento::Evento::Cmap::connectionCreated.Novo(endereço, id)
  )
end

Detalhes do atributo da instância

#global_id ➤ Inteiro (somente leitura)

em todas as conexões.

Retorna:

  • (Inteiro)

    O ID global da conexão. Isso será exclusivo

Desde:

  • 2.0.0



140
141
142
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 140

def global_id
  @global_id
end

#IDInteiro (somente leitura)

em conexões para o mesmo objeto de servidor.

Retorna:

  • (Inteiro)

    A ID da conexão. Isso será exclusivo

Desde:

  • 2.9.0



136
137
138
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 136

def id
  @id
end

#last_checkin ➤ Hora (somente leitura)

Retorna a última vez que a conexão foi verificada novamente em um pool.

Retorna:

  • (Tempo)

    A última vez que a conexão foi verificada novamente em um pool.

Desde:

  • 2.5.0



130
131
132
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 130

def last_checkin
  @last_checkin
end

Detalhes do método de instância

#fechado?verdadeiro | false

Se a conexão foi fechada.

As conexões fechadas não devem mais ser usadas. Em vez disso, obtenha uma nova conexão do pool de conexões.

Retorna:

  • (verdadeiro | falso)

    Se a conexão foi fechada.

Desde:

  • 2.9.0



166
167
168
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 166

def fechado?
  !!@closed
end

#connect!verdadeiro

Observação:

Este método muta o objeto 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



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

def Conecte-se!
  create_if_closed!

  a menos que @socket
    @socket = create_socket
    @description, @compressor = do_connect

    se Servidor.load_balancer?
      se Lint.habilitado?
        a menos que service_id
          aumentar Erro::InternalDriverError, "A conexão é com um balancer de carga e deve ter service_id definido aqui, mas não"
        end
      end
      @generação = connection_pool.geration_manager.geração(service_id: service_id)
    end

    publish_cmap_event(
      Monitoramento::Evento::Cmap::connectionReady.Novo(endereço, id)
    )

    @close_event_published = false
  end
  true
end

#conectado?verdadeiro | false

Se a conexão estava conectada e não foi interrompida, fechada ou teve um erro gerado.

Retorna:

  • (verdadeiro | falso)

    se a conexão estiver conectada.

Desde:

  • 2.0.0



154
155
156
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 154

def conectado?
  !fechado? && !erro? && !interrompido? && !!@socket
end

#connection_poolObjeto

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 pool de conexões a partir do qual essa conexão foi criada. Pode ser nulo.

Desde:

  • 2.0.0



146
147
148
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 146

def connection_pool
  opções[:connection_pool]
end

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

Observação:

Uma vez que uma conexão seja desconectada, ela não deve mais ser usada. Uma nova conexão deve ser obtida do pool de conexões que retornará uma conexão pronta ou criará uma nova conexão. Se a vinculação estiver ativada, a reutilização de uma conexão desconectada aumentará o Erro::LintError. Se o linting não estiver ativado, um aviso será registrado.

Observação:

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

Desconecte a conexão.

Parâmetros:

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

    um conjunto personalizável de opções

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

  • :reason (Símbolo)

    O motivo pelo qual a conexão está sendo fechada.

  • :interrupted (verdadeiro | falso)

    Se a conexão foi interrompida ou não.

Retorna:

  • (verdadeiro)

    Se a desconexão for bem-sucedida.

Desde:

  • 2.0.0



305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 305

def desconecte-se!(opções = nada)
  # Observação: @closed pode ser verdadeiro aqui, mas também podemos ter um soquete.
  # Verifique o soquete e não o sinalizador @closed.
  @auth_mecanismo = nada
  @last_checkin = nada
  se soquete
    soquete.Fechar salvar nada
    @socket = nada
  end
  @closed = true
  interrompido! se opções && opções[:interrupted]

  # Para satisfazer os testes de especificação do CMAP, publique eventos próximos mesmo se o
  # soquete nunca foi conectado (e, portanto, o evento pronto nunca foi
  #publicado). Mas veja se publicamos um evento próximo e não
  # publica várias vezes, a menos que o soquete tenha sido reconectado -
  # nesse caso, publique o evento próximo uma vez por fechamento do soquete.
  a menos que @close_event_published
    Razão = opções && opções[:reason]
    publish_cmap_event(
      Monitoramento::Evento::Cmap::connectionClosed.Novo(
        endereço,
        id,
        Razão,
      ),
    )
    @close_event_published = true
  end

  true
end

#erro?Booleano

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:

  • (Booleano)

Desde:

  • 2.0.0



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

def erro?
  !!@erro
end

#interrompido!Objeto

Marque a conexão como interrompida.

Desde:

  • 2.0.0



181
182
183
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 181

def interrompido!
  @interrupted = true
end

#interrompido?verdadeiro | false

Se a conexão foi interrompida.

As conexões interrompidas já foram removidas do pool e não devem ser verificadas novamente no pool.

Retorna:

  • (verdadeiro | falso)

    Se a conexão foi interrompida.

Desde:

  • 2.0.0



176
177
178
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 176

def interrompido?
  !!@interrupted
end

#pinObjeto

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.

Marque a conexão como fixada.

Desde:

  • 2.0.0



205
206
207
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 205

def pin
  @pinned = true
end

#pingverdadeiro, falso

Obsoleto.

Não é mais necessário com a especificação de seleção de servidor MongoDB.

Observação:

Isso usa uma mensagem de ping pré-serializada para otimização.

Faça ping na conexão para ver se o servidor está respondendo aos comandos. Isso não está bloqueando no lado do servidor.

Exemplos:

Ping a conexão.

connection.ping

Retorna:

  • (verdadeiro, falso)

    Se o servidor estiver aceitando conexões.

Desde:

  • 2.1.0



350
351
352
353
354
355
356
357
358
359
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 350

def Ping
  bytes = características.op_msg_enabled? ? PING_OP_MSG_BYTES : PING_BYTES
  ensure_connected fazer |soquete|
    responder = add_server_diagnóstico fazer
      soquete.escrever(bytes)
      protocolo::mensagem.desserializar(soquete, max_message_size)
    end
    responder.documentos[0][(operação)::Resultado::OK] == 1
  end
end

#fixado?Booleano

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.

Se a conexão é usada por uma transação ou operações do cursor.

As conexões fixadas não devem ser desconectadas e removidas de um pool de conexões se estiverem ociosas ou obsoletas.

# @return [ verdadeiro | false ] Se a conexão está fixada.

Retorna:

  • (Booleano)

Desde:

  • 2.0.0



198
199
200
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 198

def fixado?
  @pinned
end

#record_checkin!auto

Registre a hora do último checkin.

Exemplos:

Registre o tempo de check-in nesta conexão.

connection.record_checkin!

Retorna:

  • (self)

Desde:

  • 2.5.0



380
381
382
383
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 380

def record_checkin!
  @last_checkin = Hora.agora
  auto
end

#socket_timeout ➤ Flutuante Também conhecido como: timeout

Obtenha o tempo limite para executar uma operação em um soquete.

Retorna:

  • (Flutuante)

    O tempo limite da operação em segundos.

Desde:

  • 2.0.0



366
367
368
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 366

def socket_timeout
  @timeout ||= opções[:socket_timeout]
end

#desafixarObjeto

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.

Marque a conexão como não fixada.

Desde:

  • 2.0.0



212
213
214
# File 'build/ruby-driver-v2.19/lib/mongo/server/connection.rb', linha 212

def desafixar
  @pinned = false
end