1

我正在尝试像这样坚持我的 mongoDB 连接:

mongo **ptr = (mongo**)get_env(argv, US_VHOST_DATA);

if(!ptr[0]) {
  mongo_replica_set_init( conn, "cluster" );
  mongo_replica_set_add_seed( conn, "mongo1.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo3.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo4.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo5.mongood.com", 27017 );
  mongo_replica_set_add_seed( conn, "mongo6.mongood.com", 27017 );
  mongo_replica_set_client( conn );
  mongo_cmd_authenticate( conn, "dbname", "dbuser", "dbpass" );

  ptr[0] = (mongo*)calloc(1, sizeof(conn));
} else {
  conn[0] = *ptr[0];
}
int count = 0;
count = mongo_count( ptr[0], "dbname", "coll", NULL);

mongo_destroy( ptr[0] );

xbuf_xcat(reply, "<h3>%d</h3>", count);

但显然,它不起作用......我的目标是避免每个请求的连接时间(~30ms)

这是可行的吗?这个例子有什么问题?

该代码不会抱怨,但它只是返回 -1 而不是正确的计数。

谢谢您的帮助。


[编辑] 删除 else 块并删除 mongo_destroy 行按预期工作 \o/

4

2 回答 2

2

我从未使用过 mongo,但是查看您的代码,您正在为 ptr[0] 分配空间,但您没有为其分配任何内容,因此后续调用将始终返回 -1。而 else 块什么也不做,因为您使用 ptr[0] 而不是 conn 进行所有 mongo 调用,所以要么删除 else 块,要么更正所有 mongo 调用以使用 conn 而不是 ptr[0] 并且不要忘记在 calloc 之后将 conn 分配给 ptr。

于 2013-01-23T13:43:31.297 回答
0

查看随 G-WAN 下载提供的mysql.c 示例。它以不会让您感到困惑的方式完成相同的工作。

于 2013-01-23T16:24:14.197 回答