Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
C 驱动程序
/ /

高级连接

以下指南包含特定类型的 MongoDB 配置的信息。

有关连接到简单独立运行服务器的示例,请参阅教程。 要在启用身份验证选项的情况下建立连接,请参阅身份验证页面。 要查看数据压缩连接的示例,请参阅数据压缩页面。

连接到副本集与连接到独立运行运行的MongoDB服务器非常相似。 只需使用 ?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;
}

提示

可以在MongoDB连接string URI 中指定多个主机名,在种子列表中用逗号分隔主机。

建议使用副本集成员的种子列表,以允许驾驶员连接到任何节点。

要连接到分分片集群,请指定客户端应连接到的mongos节点。 C驱动程序将自动检测其已连接到mongos分片服务器。

如果指定了多个主机名,则会创建种子列表以尝试在mongos实例之间进行故障转移。

警告

连接mongos分片服务器时指定replicaSet参数无效。

#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;
}

MongoDB C驱动程序将自动从托管名解析 IPv 6地址。 但是,要直接指定 IPv 6解决,请将解决包装在[]中。

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

如果连接到同时具有 IPv4 和 IPv6 DNS 记录的主机名,则行为遵循 RFC-6555 。首先尝试连接到 IPv6 解决。如果 IPv6 失败,则尝试连接到 IPv4 解决。如果与 IPv 的连接尝试未在6 250毫秒内完成,则会并行尝试 IPv4 。无论哪个连接先成功,都会取消另一个连接。成功的DNS 结果会缓存10 分钟。

因此,如果同时存在与主机关联的 A (IPv 4 ) 和 AAAA (IPv 6 ) DNS 记录,则尝试连接到仅监听 IPv 4的 mongod 可能会延迟。

为避免延迟,请配置主机名以匹配MongoDB配置。 也就是说,仅当mongod仅侦听 IPv 4时才创建 A记录。

在类 UNIX 系统上, C驱动程序可以使用 UNIX 域套接字直接连接到MongoDB服务器。 将URL编码路径传递给套接字,该路径必须带有.sock后缀。 示例,要连接到位于/tmp/mongodb-27017.sock的域套接字:

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

包括用户名和密码,如下所示:

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

这些是配置 TLS/SSL 连接的说明。

要在本地运行服务器(示例,在端口27017上):

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

/?tls=true添加到客户端URI 的末尾。

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

MongoDB 默认需要客户端证书,除非提供了--tlsAllowConnectionsWithoutCertificates 。 可以将 C 驱动程序配置为使用 URI 选项tlsCertificateKeyFile提供客户端证书,该证书可以通过常量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);

tlsCertificateKeyFile提供的客户端证书必须由--tlsCAFile中列出的服务器信任的证书颁发机构之一颁发,或者如果省略,则由服务器上本原生证书存储区中的 CA 颁发。

有关各种 TLS 相关选项的更多信息,请参阅配置 TLS

此内容已移至“数据压缩”页面。

连接选项的完整列表可以在 mongoc_uri_t 文档中找到。

某些套接字/连接相关选项不可配置:

选项
说明
SO_KEEPALIVE
TCP Keep Alive
Enabled

TCP_KEEPIDLE

在 TCP 开始发送 keepalive 探针之前,连接需要保持空闲状态多长时间

120秒

TCP_KEEPINTVL
The time in seconds between TCP probes
10 seconds

TCP_KEEPCNT

在断开连接之前,在没有确认的情况下发送多少个探测

9 probes

TCP_NODELAY
Send packets as soon as possible or buffer small packets (Nagle algorithm)
Enabled (no buffering)

后退

常见任务

在此页面上