为什么在C ++中使用Libcurl的流式请求变慢

时间:2015-09-29 19:31:12

标签: c++ http iis streaming libcurl

我使用CURLOPT_READFUNCTIONCURLOPT_READDATA标记将请求流式传输到在IIS服务器上运行的.Net服务。 "读取功能"是一个非常简单的回调。这里有一个伪代码来描述正在发生的事情:

size_t a_callback(char* bodyPtr, size_t bytesPerItem, size_t numItems, void* userData) {
  request rqst = *static_cast<request*>(userData);

  const readSize = std::min(bytesPerItem * numItems, rqst.bytesRemaining);
  if (!readSize)
    return 0;

  char* orig = rqst.ptr;
  rqst.ptr += readSize;
  rqst.bytesRemaining -= readSize;

  memcpy(bodyPtr, orig, readSize);
  return readSize;
}

问题是,这样做方式比使用CURLOPT_POSTFIELDS慢。例如:

curl_easy_setopt(m_curl, CURLOPT_POSTFIELDS, rqst.ptr);
curl_easy_setopt(m_curl, CURLOPT_POSTFIELDSIZE, rqst.bytesRemaining);

有没有人知道C ++ libcurl中的流媒体请求会比仅仅在大块中发送请求数据慢得多?我可以调整一些选项来尝试提高速度吗?我错过了服务器上的一些设置来解决某种瓶颈问题吗?我很欣赏人们的见解。

0 个答案:

没有答案