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);

しかし、明らかに、うまくいきません...私の目標は、各リクエストでの接続時​​間を回避することです(〜30ミリ秒)

それは可能ですか?この例では何が間違っていますか?

コードは文句を言いませんが、正しいカウント数の代わりに -1 を返すだけです。

ご協力ありがとうございました。


[編集] else ブロックの削除と mongo_destroy 行の削除は、期待どおりに機能します \o/

4

2 に答える 2

2

私はmongoを使用したことがありませんが、コードを見るとptr [0]にスペースを割り当てていますが、何も割り当てていないため、後続の呼び出しは常に-1を返します。また、conn の代わりに ptr[0] を使用してすべての mongo 呼び出しを行っているため、else ブロックは何もしていません。したがって、else ブロックを削除するか、ptr[0] の代わりに conn を使用するようにすべての mongo 呼び出しを修正してください。 calloc の後で conn を ptr に割り当てます。

于 2013-01-23T13:43:31.297 に答える
0

G-WANダウンロードで提供されるmysql.cの例を見てください。それはあなたを混乱させない方法で同じ仕事をします。

于 2013-01-23T16:24:14.197 に答える