我使用CURLOPT_READFUNCTION
和CURLOPT_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
中的流媒体请求会比仅仅在大块中发送请求数据慢得多?我可以调整一些选项来尝试提高速度吗?我错过了服务器上的一些设置来解决某种瓶颈问题吗?我很欣赏人们的见解。