所以我有一个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)