Php 当与MongoDB的连接未关闭时会发生什么情况?

Php 当与MongoDB的连接未关闭时会发生什么情况?,php,mongodb,mongodb-php,Php,Mongodb,Mongodb Php,我有以下PHP脚本,基本上连接到MongoDB,编写文档,然后关闭连接19000次: <?php for($i=0; $i < 19000; $i++) { $con = new Mongo("mongodb://localhost:27017"); $db = $con->selectDB('test'); $col = $db->selectCollection('close_wait_test'); $col->insert(

我有以下PHP脚本,基本上连接到MongoDB,编写文档,然后关闭连接19000次:

<?php
for($i=0; $i < 19000; $i++) {
    $con = new Mongo("mongodb://localhost:27017");
    $db = $con->selectDB('test');

    $col = $db->selectCollection('close_wait_test');
    $col->insert(array('Test' => 'Value1'));

    $con->close();
}
?>

运行此脚本一次就可以了,但是如果几秒钟后运行该脚本,就会出现“无法分配请求的地址”异常,这是可以理解的,因为服务器系统可能已经没有端口了

但是,如果我删除$con->close();我可以反复运行该脚本,而不会对数据库造成任何明显的压力。我假设这是因为与数据库的连接是持久的,并且在脚本上重用相同的初始连接


我想知道的是,如果20k+不同的用户同时运行这个脚本的一个循环,数据库会发生什么情况?e、 g.是否会因为每个用户需要创建一个到数据库的连接而导致可用连接耗尽?还是所有这些用户都使用第一个用户创建的相同初始连接?

您将得到一个致命错误:

PHP致命错误:未捕获异常“MongoConnectionException”,在/home/pierre/test.PHP:3中显示消息“无法分配请求的地址”
堆栈跟踪:
#0/root/test.php(3):Mongo->\uu构造('mongodb://local...')
#1{main}
在第3行的/home/pierre/test.php中抛出

c=0;而(20000加元);;做php test.php;c=$[c+1];完成


使用mongodb和默认配置进行测试。MongoDB一直在运行,其他脚本也一直在执行它们的任务。也许你应该考虑使用像JooServer这样的东西,例如Grimman。< /P> < P>在每次迭代中你不应该调用->关闭()。如果调用close,则告诉驱动程序不要重用持久连接。如果在一个紧密的循环中运行,那么操作系统的端口将用完,因为它们都处于时间等待状态

PHP驱动程序使用持久连接,如果(不调用->close)像示例中那样在紧循环中运行“new Mongo”,驱动程序将不会创建新连接并重用现有连接