当我第一次从PHP连接到MongoDB时出错-当我刷新页面时就会消失


Error when I connect to MongoDB first time from PHP - goes away when I refresh page

所以我有一个PHP脚本,它使用常规连接方法连接到Mongo:

$this->mongo = new MongoClient( "mongodb://<connection param>" );
$this->mongoSynthCollection = $this->mongo->map->Synth;
$cursor = $this->mongoSynthCollection ->find();

然后,我继续解析并使用synthCollection对象。当我第一次加载这个文件时(我指的是第一次,比如早上),我会得到一个错误:

致命错误:未捕获异常"MongoCursorException",消息为'WSA获取数据库响应时出错读取0后读取超时字节,等待30.000000秒的

如果我刷新页面,那么错误就会消失,我得到了集合对象,我可以毫无问题地使用它。如果我让页面闲置一段时间,然后重试,那么问题就会返回。

注意:我没有在页面中使用任何会话,因为我的应用程序逻辑不需要会话。我在PHP脚本中也设置了set_time_limit(0),但我认为在这种情况下这并不重要。

我不确定这里出了什么问题,如果有任何建议,我将不胜感激。

根据我的经验,在服务器重新启动第一次连接Mongo后,这是/曾经是正常的。这与持久连接和服务器丢弃它们有关。请参见此处:https://jira.mongodb.org/browse/PHP-636

也就是说,您遇到的错误是因为在运行查询之前没有仔细检查连接。如果你做了这样的事情:

try{
    $this->mongo = new MongoClient();
}catch(MongoConnectionException $e){
    var_dump($e);
}

你可能会得到:

["message":protected]=>
string(78) "Failed to connect to: localhost:27017: Remote server has closed the connection"
["string":"Exception":private]=>
string(0) ""
["code":protected]=>
int(71)