我目前有一个 C++ 程序通过套接字接收来自 Web 应用程序的请求,并生成返回的 Json 文件 (150 Ko),该应用程序将读取该文件。
- 我想知道直接通过套接字提供数据是否会更快?
- 如果是的话,发送它的最快格式是什么(Json、Xml、我自己解析的个人格式,...)?
- 我应该立即发送整个包裹(150 Ko)还是应该通过套接字流式传输?
最佳答案
如果我理解您所写的内容正确,Web 服务器正在将请求转发到您的 C++ 程序,并且您希望 PHP 应用程序通过向 Web 服务器发出 Web 请求来读取数据,而 Web 服务器又将请求转发到用于提供响应的 C++ 程序。
以下是提高此设置速度的三个想法:
考虑使用流解析器来解析从套接字读取的数据。这将允许您的 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 应用程序不需要等到数据完全下载。
如果您的 C++ 程序正在从文件读取 JSON 并通过套接字发送文件内容,请考虑使用 zero-copy I/O 。另请参阅vmsplice() .
如果 C++ 程序和 PHP 应用程序在同一服务器上运行,则可以使用共享内存段。这将消除通过套接字传输数据的需要,因为 C++ 程序和 PHP 应用程序都可以访问一段内存。 C++ 程序会将所有数据写入共享内存段,然后 PHP 应用程序读取数据。
请参阅 PHP 的 Semaphore functions了解更多信息。
关于php - 在两个应用程序之间传输大量数据的最快方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30508425/