6

我在使用fgets获取服务器对我正在进行的一些批处理数据库调用的响应时产生的延迟存在一些实际问题。

我正在发送一批比如说 10,000 个呼叫,并且我已经跟踪到 fgets 的滞后,导致我的应用程序速度受阻,因为需要获取每个呼叫的响应。

我发现这个线程http://bugs.php.net/bug.php?id=32806很好地解释了这个问题,但他正在读取一个文件,而不是服务器响应,所以fread可能有点棘手,因为我可以得到一部分下一行,以及我不想要的额外内容。

所以我的问题是,作为 fgets 的替代方法,从服务器读取响应的最佳/最快方法是什么?

4

2 回答 2

1

file_get_contents (或 stream_get_contents 如果你有一个流)应该是读取服务器响应的最快方法。好吧,它是检索数据的最快方式,但在查看内存使用情况时,它通常是最浪费的方式,因为它一次将所有文件读入内存,而 fgets 不需要在内存中保留超过一行。

您也可以使用 fread,它比 fgets 更快,并且以您可以定义的特定大小的块读取文件。

如果您依赖逐行读取数据,则可以使用 file(),它比 file_get_contents 慢,但它为您提供了一个包含文件行的数组。

为了给你一个更好的答案——如上所述——我们需要更多信息。

于 2010-04-27T21:35:46.723 回答
0

这里没有足够的信息。

大概你的意思是你在某个地方运行一些 PHP,它调用 fgets 从其他东西读取数据 - 但还有什么东西?你暗示它不是一个文件——那它是什么?本地节目?管道?网络套接字?网页?……别的?

您可以使用不同的工具更快地阅读它吗?你试过什么?你在什么操作系统上运行?您是否具有运行 netcat 或类似功能的 shell 访问权限?

另外,您在谈论滞后,而您所指的“错误”主要是解决带宽问题。

如果不了解更多有关该问题的信息,就不可能提出解决方案。

C。

于 2010-04-19T21:37:57.620 回答