Menu Docs
Página inicial do Docs
/ / /
Driver C
/ /

Conexões avançadas

Nesta página

  • Conexão com conjunto de réplicas
  • Conectando-se a um cluster fragmentado
  • Conectando-se a um endereço IPv6
  • Conexão com IPv4 e IPv6
  • Conectando-se a um soquete de domínio UNIX
  • Conectar a um servidor por TLS
  • Compactando dados de e para MongoDB
  • Opções adicionais de conexão

O guia a seguir contém informações específicas para determinados tipos de configurações do MongoDB.

Para ver um exemplo de conexão com um servidor autônomo simples, consulte oTutorial . Para estabelecer uma conexão com as opções de autenticação habilitadas, consulte a página Autenticação . Para ver um exemplo de uma conexão com compressão de dados, consulte a página Compressão de dados .

A conexão a umconjunto de réplicas é muito parecida com a conexão a um servidor MongoDB autônomo . Basta especificar o nome do conjunto de réplicas usando a opção ?replicaSet=myreplset URI.

#include <bson/bson.h>
#include <mongoc/mongoc.h>
int
main (int argc, char *argv[])
{
mongoc_client_t *client;
mongoc_init ();
/* Create our MongoDB Client */
client = mongoc_client_new (
"mongodb://host01:27017,host02:27017,host03:27017/?replicaSet=myreplset");
/* Do some work */
/* TODO */
/* Clean up */
mongoc_client_destroy (client);
mongoc_cleanup ();
return 0;
}

Dica

Vários nomes de host podem ser especificados no URI da connection string do MongoDB, com uma vírgula separando os hosts na lista de sementes.

É recomendável usar uma lista de sementes de membros do conjunto de réplicas para permitir que o driver se conecte a qualquer nó.

Para se conectar a um cluster fragmentado, especifique os nós mongos aos quais o cliente deve se conectar. O Driver C detectará automaticamente que se conectou a um servidor de fragmentação mongos .

Se mais de um nome de host for especificado, uma lista de sementes será criada para tentar o failover entre as instâncias do mongos .

Aviso

A especificação do parâmetro replicaSet ao conectar a um servidor de fragmentação mongos é inválida.

#include <bson/bson.h>
#include <mongoc/mongoc.h>
int
main (int argc, char *argv[])
{
mongoc_client_t *client;
mongoc_init ();
/* Create our MongoDB Client */
client = mongoc_client_new ("mongodb://myshard01:27017/");
/* Do something with client ... */
/* Free the client */
mongoc_client_destroy (client);
mongoc_cleanup ();
return 0;
}

O driver C do MongoDB resolverá automaticamente os endereços IPv6 dos nomes de host. No entanto, para especificar um endereço IPv6 diretamente, envolva o endereço em [].

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://[::1]:27017");

Se estiver conectando a um nome de host que tenha registros4 DNS IPv e IPv6 , o comportamento segue RFC-6555. Uma conexão com o endereço IPv6 é tentada primeiro. Se o IPv6 falhar, será tentada uma conexão com o endereço IPv4 . Se a tentativa de conexão com o IPv6 não for concluída dentro 250ms, o IPv4 será tentado em paralelo. O que tiver sucesso na conexão primeiro cancela o outro. O resultado de DNS bem-sucedido é armazenado em cache por 10 minutos.

Como consequência, as tentativas de se conectar a um mongod apenas escutando em IPv4 podem ser atrasadas se houver registros DNS A (IPv4) e AAAA (IPv6) associados ao host.

Para evitar atrasos, configure os nomes de host para corresponder à configuração do MongoDB . Ou seja, crie somente um registro A se o mongod estiver escutando apenas no IPv4.

Em sistemas do tipo UNIX, o C Driver pode se conectar diretamente a um servidor MongoDB usando um soquete de domínio UNIX. Passe o caminho codificado da URL para o soquete, que deve ser sufixado com .sock. Por exemplo, para conectar a um soquete de domínio em /tmp/mongodb-27017.sock:

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://%2Ftmp%2Fmongodb-27017.sock");

Inclua nome de usuário e senha da seguinte forma:

mongoc_uri_t *uri = mongoc_uri_new ("mongodb://user:pass@%2Ftmp%2Fmongodb-27017.sock");

Estas são instruções para configurar conexões TLS/SSL.

Para executar um servidor localmente (na porta 27017, por exemplo):

$ mongod --port 27017 --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem

Adicione /?tls=true ao final do URI de um cliente .

mongoc_client_t *client = NULL;
client = mongoc_client_new ("mongodb://localhost:27017/?tls=true");

O MongoDB exige certificados de cliente por padrão, a menos que o --tlsAllowConnectionsWithoutCertificates seja fornecido. O Driver C pode ser configurado para apresentar um certificado de cliente usando a opção URI tlsCertificateKeyFile, que pode ser referenciada por meio da constante MONGOC_URI_TLSCERTIFICATEKEYFILE.

mongoc_client_t *client = NULL;
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017/?tls=true");
mongoc_uri_set_option_as_utf8 (uri, MONGOC_URI_TLSCERTIFICATEKEYFILE, "client.pem");
client = mongoc_client_new_from_uri (uri);

O certificado de cliente fornecido pelo tlsCertificateKeyFile deve ser emitido por uma das Autoridades de Certificado confiáveis do servidor listadas no --tlsCAFile ou emitida por uma CA no armazenamento de certificado nativo no servidor quando omitido.

Consulte Configuração do TLS para obter mais informações sobre as várias opções relacionadas ao TLS.

Este conteúdo foi realocado para a página Compressão de dados .

A lista completa de opções de conexão pode ser encontrada em mongoc_uri_t Docs.

Algumas opções relacionadas a soquete/conexão não são configuráveis:

Opção
Descrição
Valor
SO_KEEPALIVE
TCP Keep Alive
Enabled
TCP_KEEPIDLE
Quanto tempo uma conexão precisa permanecer ociosa antes que o TCP comece a enviar sondagens de keepalive
120 segundos
TCP_KEEPINTVL
The time in seconds between TCP probes
10 seconds
TCP_KEEPCNT
Quantas sondas enviar, sem confirmação, antes de encerrar a conexão
9 probes
TCP_NODELAY
Send packets as soon as possible or buffer small packets (Nagle algorithm)
Enabled (no buffering)

Voltar

Tarefas comuns