1

我目前正在使用 SoapClient 通过 PHP 脚本访问 SOAP Web 服务。我的脚本调用多个下标(大约每秒 30 个),每个下标都发送一个请求,然后将响应推送到 MySQL 数据库。我的流程试图模拟“异步”请求/响应机制。

在我的下标中,我连接到 mysql 并在连接完成后关闭连接。我每秒运行大约 30 个下标。我遇到了一个问题,我正在最大化我的 MySQL 连接。

我不想增加最大连接数,因为我觉得这是不好的做法。有没有更好的方法来解决这个问题?我在想我可以以某种方式在下标和脚本之间共享一个 mysql 连接。

4

3 回答 3

0

如果所有下标在一个线程中按顺序运行,那么您可以连接到 MySQL 一次并将此连接传递给所有下标。

如果下标是并行运行的,那么这取决于你的 MySQL 库是否是线程安全的。如果是,那么您可以将一个连接传递给所有这些。但如果没有,您别无选择,只能每个脚本一个连接。此信息应在其文档中提及。

如果您只需要并行运行一些脚本并且有些可以等待一段时间,那么您可以准备几个连接池(10 个左右)并一次只运行 10 个脚本。当一个脚本结束时,您将启动下一个并重用旧连接。

于 2013-01-30T13:22:49.357 回答
0

您可以尝试连接池。我不确定这在 php 中是否可行,以及是否已经有可用的框架。

如果它不可用,您可以使用包含连接列表的 Singleton 类。如果该类空闲 N 秒,则让该类关闭连接。这意味着您的 30 个下标可以重用其他脚本未使用的连接。

于 2013-01-30T14:04:59.487 回答
0

你试过mysqli_pconnect吗?你如何产生你的子进程?不能在主进程中打开数据库连接,传给子进程吗?您正在做什么的任何代码示例?

于 2013-01-30T14:13:49.957 回答