PHP会话中的Mongo连接

时间:2014-09-14 13:27:52

标签: php ajax mongodb session

我正在开发一个应用程序,它会在几秒钟内激活Ajax大约4次。每次触发Ajax时,PHP文件都必须连接到MongoDB。它有时会导致设置额外的3个mongo连接(根据实时服务器日志)。 如何在PHP会话期间建立一个连接而不需要设置新连接?

2 个答案:

答案 0 :(得分:1)

连接数实际上不是问题。驱动程序实际上建立了一个连接池。在副本集和分片集群中也存在管理连接。拥有多个连接不是问题。

虽然我非常了解MongoDB,但我不是PHP专家。但据我所知,PHP中没有应用程序级变量。所以afaik,没有方法在应用程序级别存储连接(池)。

最可能发生的是您在php文件中打开连接,由于某种原因,服务器保持此连接保持打开状态,因为服务器端游标仍然连接到该连接。让我们称这些孤立的连接。 10分钟后服务器将这些孤立的连接拆除。

mongod / mongos实例可以采用的连接限制为20.000。所以你可以使用很多连接。不过你应该确保你用这些游标耗尽(之后它们会被自动拆除)或者用手动将它们拆掉

$cursor->reset();

在函数/方法/源文件的末尾。否则,当您的应用程序获得大量用户时,您可能会遇到问题。

答案 1 :(得分:1)

你不能。当脚本退出(或调用serialize())时,会话将使用类似于session_write_close()的格式写入文件 - 因此,它们无法存储PHP resource objects,例如数据库连接。 / p>

如果您在每个请求中看到多个Mongo连接,您可能无法运行当前版本的PHP MongoDB扩展 - 当前版本(1.3或更高版本)会自动在请求之间池连接。更新到当前版本的驱动程序,不需要进一步的工作。