C++ cpprest服务器,需要一种在运行时更改CHUNK_SIZE值的方法

C++ cpprest服务器,需要一种在运行时更改CHUNK_SIZE值的方法,c++,curl,casablanca,C++,Curl,Casablanca,我们的应用程序通常传输数百兆字节的数据(使用HTTP GET),默认的64 Kb块大小对于最佳下载速率来说似乎太小了。将该值更改为5 Mb可以将2 Gb数据的下载时间从2分钟减少到28秒 演示代码,它只是在内存中分配请求的数据并发送它们: #include <Windows.h> #include <cpprest/http_listener.h> #include <cpprest/json.h> #include <cpprest/streams.h

我们的应用程序通常传输数百兆字节的数据(使用HTTP GET),默认的64 Kb块大小对于最佳下载速率来说似乎太小了。将该值更改为5 Mb可以将2 Gb数据的下载时间从2分钟减少到28秒

演示代码,它只是在内存中分配请求的数据并发送它们:

#include <Windows.h>
#include <cpprest/http_listener.h>
#include <cpprest/json.h>
#include <cpprest/streams.h>
#include <cpprest/filestream.h>
#include <cpprest/producerconsumerstream.h>
#include <algorithm>
#include <chrono>
#include <iostream>
#include <string>

using namespace concurrency::streams;
using namespace web;
using namespace http;
using namespace http::experimental::listener;

int main(int argc, char *argv[]) {

    http_listener listener(L"http://*:8080/bytes");

    listener.support(methods::GET, [](http_request &request) {

        auto q = web::uri::split_query(request.request_uri().query());

        // default: 100 MB of data
        std::size_t bytes_to_write = 100 * 1048576;

        if (q.find(L"b") != std::end(q)) {
            bytes_to_write = std::stoul(q[L"b"]);
        }
        if (q.find(L"kb") != std::end(q)) {
            bytes_to_write = std::stoul(q[L"kb"]) * 1024;
        }
        if (q.find(L"mb") != std::end(q)) {
            bytes_to_write = std::stoul(q[L"mb"]) * 1024 * 1024;
        }

        request.reply(status_codes::OK, std::string(bytes_to_write, '+'));
        std::cout << "Sent " << bytes_to_write << "bytes\n";
    });

    listener.open().wait();

    std::wcout << "Listening on " << listener.uri().port() << std::endl;

    while (true) {
        try {
            Sleep(1);
        }
        catch (...) {
            break;
        }
    }

    listener.close().wait();

    return 0;
}
使用5Mb chunck大小:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2000M  100 2000M    0     0  69.2M      0  0:00:28  0:00:28 --:--:-- 77.1M
目前我正在修改cpprest的源代码以获得更高的结果。它是一个名为
CHUNK\u SIZE
的宏,在其一个源文件(
http\u server\u httpsys.cpp
)中定义:


有没有更简单的方法?还是我用错了cpprest?

为什么不把它作为一个参数?@luke我想你不能用其他任何方法。如果您想这样做,它涉及到对库的许多其他更改,这不是一个好方法。@adam如果我知道如何传递参数,我将非常不愿意更改库的源代码。@Prakash我将尝试。也许我可以用我自己的来替换实现…但这意味着替换DLL中的某些东西…因此当前的方法似乎最令人惊讶。为什么不将其作为一个参数?@luke我认为你没有其他方法可以做到。如果您想这样做,它涉及到对库的许多其他更改,这不是一个好方法。@adam如果我知道如何传递参数,我将非常不愿意更改库的源代码。@Prakash我将尝试。也许我可以用我自己的来替换实现…但这意味着替换DLL中的某些东西…因此当前的方法似乎最令人惊讶。
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2000M  100 2000M    0     0  69.2M      0  0:00:28  0:00:28 --:--:-- 77.1M
#define CHUNK_SIZE 64 * 1024