php - 在两个应用程序之间传输大量数据的最快方式

标签 php c++ sockets

我目前有一个 C++ 程序通过套接字接收来自 Web 应用程序的请求,并生成返回的 Json 文件 (150 Ko),该应用程序将读取该文件。

  1. 我想知道直接通过套接字提供数据是否会更快?
  2. 如果是的话,发送它的最快格式是什么(Json、Xml、我自己解析的个人格式,...)?
  3. 我应该立即发送整个包裹(150 Ko)还是应该通过套接字流式传输?

最佳答案

如果我理解您所写的内容正确,Web 服务器正在将请求转发到您的 C++ 程序,并且您希望 PHP 应用程序通过向 Web 服务器发出 Web 请求来读取数据,而 Web 服务器又将请求转发到用于提供响应的 C++ 程序。

以下是提高此设置速度的三个想法:

  1. 考虑使用流解析器来解析从套接字读取的数据。这将允许您的 PHP 应用程序在从套接字读取所有数据之前开始使用和处理数据。

    许多 JSON 库不提供流式解析 API(请参阅 Is there a streaming API for JSON?)。例如,PHP 的内置 JSON API 就没有。但是,请参阅Incremental JSON parsing in php .

    PHP 有一个内置的 XML 拉解析器,XMLReader 。如果您的 C++ 程序生成 XML 数据,您可以使用 PHP 中的 XMLReader 增量解析 XML,这意味着您的 PHP 应用程序不需要等到数据完全下载。

  2. 如果您的 C++ 程序正在从文件读取 JSON 并通过套接字发送文件内容,请考虑使用 zero-copy I/O 。另请参阅vmsplice() .

  3. 如果 C++ 程序和 PHP 应用程序在同一服务器上运行,则可以使用共享内存段。这将消除通过套接字传输数据的需要,因为 C++ 程序和 PHP 应用程序都可以访问一段内存。 C++ 程序会将所有数据写入共享内存段,然后 PHP 应用程序读取数据。

    请参阅 PHP 的 Semaphore functions了解更多信息。

关于php - 在两个应用程序之间传输大量数据的最快方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508425/

相关文章:

php - 使用 jquery 和 php 处理目录中的文件 - 获取状态并更新进度条

c++ - 打开文件流输入的 Getline 问题

java - Android 客户端/服务器 Socket 客户端未接收

python通过套接字发送不完整的数据

php - php while循环中的对齐问题

PHP - 替换多维数组中的数据,特定键

javascript - 读取通过 Ajax 调用发送的 PHP 中的 json 数据

python - 在 python 中使用 C++ 对象与 pybind11

c++ - 传递给新线程的结构有错误的值

python - 检查 Tornado (Python) 中的 HTTPS 连接以识别缓慢