【问题标题】:Error when I connect to MongoDB first time from PHP - goes away when I refresh page第一次从 PHP 连接到 MongoDB 时出错 - 刷新页面时消失
【发布时间】:2015-02-28 17:12:13
【问题描述】:

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

$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),但无论如何我认为这在这种情况下并不重要。

我不确定这里出了什么问题,我将不胜感激。

【问题讨论】:

    标签: php mongodb exception database-connection


    【解决方案1】:

    根据我的经验,在服务器重新启动以首次连接到 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-02
      • 1970-01-01
      • 2013-07-16
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 2017-05-10
      相关资源
      最近更新 更多