在两个应用程序之间传递大量数据的最快方法

时间:2015-05-28 13:46:48

标签: php c++ sockets

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

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

1 个答案:

答案 0 :(得分:2)

如果我理解你所写的内容正确,那么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 pull解析器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