Classe: Mongo::Address
- Herda:
-
Objeto
- Objeto
- Mongo::Address
- Estendido por:
- Encaminhável
- Definido em:
- build/ruby-driver-v2.19/lib/mongo/address.rb,
build/ruby-driver-v2.19/lib/mongo/address/ipv4.rb,
build/ruby-driver-v2.19/lib/mongo/address/ipv6.rb,
build/ruby-driver-v2.19/lib/mongo/address/unix.rb,
build/ruby-driver-v2.19/lib/mongo/address/validator.rb
Visão geral
Representa um endereço para um servidor, com um endereço IP ou caminho de soquete.
Definido sob namespace
Módulos: Validador Classes: IPv4, IPv6, Unix
Colapsode resumo constante
- FAMILY_MAP =
Mapeamento da família de soquete para a classe do resolvedor.
{ ::Soquete::PF_UNIX => Unix, ::Soquete::CR_INET6 => IPv6, ::Soquete::CR_INET => IPv4 }.congelar
- LOCALHOST =
A constante do localhost.
'localhost'.congelar
Recolhimento do Resumo do atributo de instância
-
#host ➤ string
Somente leitura
Host O nome do host original.
- #opções ➤ Objeto Somente leitura privado
-
#porta ➤ Inteiro
Somente leitura
Porta A porta.
-
#semente ➤ string
Somente leitura
Semente O endereço da semente.
Recolhimento do Resumo do método de instância
-
#==(outro) ➤ verdadeiro, falso
Verifique a igualdade do endereço com outro.
-
#eql?(outro) ➤ verdadeiro, falso
Verifique a igualdade para hash.
-
#hash ➤ inteiro
Calcule o valor de hash para o endereço.
-
#inicializar(semente, opções = {}) ➤ Endereço
construtor
Inicialize o endereço.
-
#inspecionar ➤ string
Obtenha uma inspeção de endereço impressa.
-
#soquete(socket_timeout, opts = {}) ➤ Mongo::Socket::SSL | Mongo::Soquete::TCP | Mongo::Socket::Unix
privado
Obtenha um soquete para o endereço armazenado neste objeto, dadas as opções.
-
#to_s ➤ string
Obtenha o endereço como uma string.
Detalhes do construtor
#inicializar(semente, opções = {}) ➤ Endereço
Inicialize o endereço.
75 76 77 78 79 80 81 82 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 75 def inicializar(Semente, = {}) se Semente.nada? aumentar ArgumentError, "o endereço não deve ser nulo" end @seed = Semente @host, @port = parse_host_port @opções = Hash[.map { |k, v| [k.to_sym, v] }] end |
Detalhes do atributo da instância
#host ➤ string (somente leitura)
Retorna host O nome do host original.
88 89 90 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 88 def Anfitrião @host end |
#opções Objeto (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.
94 95 96 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 94 def @opções end |
#porta ➤ inteiro (somente leitura)
Retorna porta A porta.
91 92 93 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 91 def Porta @port end |
#semente ➤ string (somente leitura)
Retorna semente O endereço da semente.
85 86 87 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 85 def Semente @seed end |
Detalhes do método de instância
#==(outro) ➤ true, false
Verifique a igualdade do endereço com outro.
106 107 108 109 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 106 def ==(Outro) Método false a menos que Outro.is_a?(endereço) Anfitrião == Outro.Anfitrião && Porta == Outro.Porta end |
#eql?(outro) ➤ true, false
Verifique a igualdade para hash.
121 122 123 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 121 def eql?(Outro) auto == Outro end |
#hash ➤ inteiro
Calcule o valor de hash para o endereço.
133 134 135 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 133 def hash [ Anfitrião, Porta ].hash end |
#inspecionar ➤ string
Obtenha uma inspeção de endereço impressa.
145 146 147 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 145 def inspecionar "#<Mongo::Address:0x#{object_id} endereço=#{to_s}>" end |
#soquete(socket_timeout, opts = {}) ➤ Mongo::Socket::SSL | Mongo::Soquete::TCP | Mongo::Socket::Unix
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.
Obtenha um soquete para o endereço armazenado neste objeto, dadas as opções.
Se o endereço armazenado neste objeto se parecer com um caminho Unix, este método retornará um soquete de domínio Unix para este caminho.
Caso contrário, esse método tenta resolver o endereço armazenado nesse objeto para endereços IPv4 e IPv6 usando Socket#getaddrinfo, depois se conecta aos endereços resultantes e retorna o soquete da primeira conexão bem-sucedida. A ordem em que as família de endereços (IPv4/IPV6) são tentadas é a mesma ordem em que os endereços são retornados por getaddrinfo
e é determinada pelo sistema de host.
A resolução de nomes é realizada em cada chamada socket
. Isso é feito para que quaisquer alterações nos endereços para os quais os nomes de host usados como sementes ou na configuração do servidor sejam imediatamente notadas pelo driver, mesmo que um soquete tenha sido conectado ao nome/endereço afetado antes. No entanto, observe que os valores de DNS TTL ainda podem afetar quando uma alteração em um endereço de host é notada pelo driver.
Esse método propaga quaisquer exceções geradas durante a resolução de DNS e as tentativas de conexão subsequentes. No caso de um nome de host resolver para vários endereços IP, o erro gerado pela última tentativa será propagado para o chamador. Este método não mapeia exceções para subclasses Mongo::Error e pode gerar qualquer subclasse de Exceção.
216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 216 def soquete(socket_timeout, opciona = {}) opciona = { connect_timeout: Servidor::CONNECT_TIMEOUT, }.update().update(Hash[opciona.map { |k, v| [k.to_sym, v] }]) map_Exceptions fazer se Semente.downcase =~ Unix::corresponder endereço_específico = Unix.Novo(Semente.downcase) Método endereço_específico.soquete(socket_timeout, opciona) end # Quando o driver se conecta a "localhost", ele só tenta IPv4 # conexões. Quando o driver se conecta a outros hosts, ele irá # tenta conexões IPv4 e IPv6 . família = (Anfitrião == localhost) ? ::Soquete::CR_INET : ::Soquete::CR_UNspec Erro = nada # Às vezes, o Socket#getaddrinfo retorna as mesmas informações mais de uma vez # (vários itens idênticos na array retornada). Isso não faz # faz sentido tentar se conectar ao mesmo endereço mais de uma vez, assim # elimine duplicatas aqui. informações = ::Soquete.getaddrinfo(Anfitrião, nada, família, ::Soquete::SOCK_STREAM) Resultados = informações.map fazer |informações| [informações[4], informações[3]] end.uniq Resultados.cada fazer |família, endereço_str| começar endereço_específico = FAMILY_MAP[família].Novo(endereço_str, Porta, Anfitrião) soquete = endereço_específico.soquete(socket_timeout, opciona) Método soquete salvar IOError, SystemCallError, Erro::SocketTimeoutError, Erro::Erro de soquete => e Erro = e end end aumentar Erro end end |
#to_s ➤ string
Obtenha o endereço como uma string.
261 262 263 264 265 266 267 268 269 270 271 |
# File 'build/ruby-driver-v2.19/lib/mongo/address.rb', linha 261 def to_s se Porta se Anfitrião.incluir?(':') "[#{host}]:#{porta}" mais "#{host}:#{porta}" end mais Anfitrião end end |