2013-03-27 61 views
1
  • 如今,在簡單的代碼片段如下,如果我的查詢返回的結果, 一切正常。查詢後MongoDB的插座不同的是不返回任何結果

  • 如果查詢返回沒有結果,那麼所有東西仍然如預期的那樣, 異常被拋出並被捕獲。

  • 此查詢後,如果我嘗試執行另一個查詢時, 聲明dbConn->query(collection, queryObj)拋出一個mongo::SocketException。而打印的信息是:

    socket exception [SEND_ERROR] for 127.0.0.1:27017 // 9001 socket exception [2] server [127.0.0.1:27017]

  • 從這一個上,下面的查詢都會拋出同樣的異常,有不同的消息: socket exception [FAILED_STATE] for localhost:27017 // 9001 socket exception [5] server [localhost:27017]

  • 我也打印出來的錯誤代碼串,他們都是「未知錯誤」。

  • 如果我重新啓動的過程中,它重置,因此我假設的連接莫名其妙地損壞。目前沒有其他人訪問共享的ptr。蒙戈守護進程運行正常,並沒有什麼不尋常的MongoDB中的日誌。

  • 我最大的問題是:爲什麼會發生?

的片段:

try 
{ 
    // Some initialzation here.. 
    // dbConn is a boost::shared_ptr<mongo::DBClientConnection> 

    std::auto_ptr<mongo::DBClientCursor> cursor = dbConn->query(collection, queryObj); 
    if (!cursor->more()) 
    { 
     throw Exception(); 
    } 
} 
catch(const Exception&) 
{ 

} 
catch(const mongo::SocketException& e) 
{ 
    std::cout << ex.what() << "//" << ex.toString() << std::endl; 
} 

MongoDB的C++驅動程序版本是2.3.2。

回答

0

我假設你獲取和初始化連接別的地方在你的代碼,希望避免獲取每次你需要它的時候這方面的開銷。 (我最初在我的代碼中也是這樣做的)。

我想你會發現,移動連接收購使用ScopedDbConnection並獲得由司機會順水推舟建立新的連接更緊密;司機似乎足夠管理連接。

相關問題