On Thursday, 1 October 2020 at 00:35:49 UTC, Arun wrote:
I have a REST client that can do load test of my REST services. It uses ikod's dlang-requests under the hood. https://github.com/ikod/dlang-requests

At the moment I use a thread pool to dispatch the runtime operation and send the requests to the server.

As seen, the downside is that the more threads we use the more memory the app consumes. Is there a way to replace the threads with fibers in this particular case so that instead of spawning 1000 threads, we spawn 1000 fibers with just 1 thread?

Hello, you can use requests with vibe.d sockets. You'll get the idea from example:

---
dub.json:
{
        "authors": [
                "me"
        ],
        "copyright": "Copyright © 2020, me",
        "dependencies": {
                "requests": "~>1.1.7",
                "vibe-d": "~>0.9.2"
        },
        "description": "A minimal D application.",
        "license": "proprietary",
        "name": "t",
        "subConfigurations": {
            "requests": "vibed"
        }
}

---
import vibe.core.core;
import vibe.core.log;
import requests;

static void workerFunc(string url)
{
    logInfo("Param: %s", url);
    Request rq;
    rq.verbosity = 1;
    auto rs=rq.get(url);
    logInfo("response code: %s", rs.code);
}

void main()
{
auto urls = ["http://httpbin.org/";, "http://httpbin.org/image";];
    foreach(url; urls)
    {
        runWorkerTask(&workerFunc, url);
    }
    runApplication();
}
---
GET / HTTP/1.1
User-Agent: dlang-requests
Host: httpbin.org
Connection: Keep-Alive
Accept-Encoding: gzip,deflate

GET /image HTTP/1.1
User-Agent: dlang-requests
Host: httpbin.org
Connection: Keep-Alive
Accept-Encoding: gzip,deflate

< HTTP/1.1 200 OK
< date: Thu, 01 Oct 2020 03:07:33 GMT
< content-type: image/png
< content-length: 8090
< connection: keep-alive
< server: gunicorn/19.9.0
< access-control-allow-origin: *
< access-control-allow-credentials: true
< HTTP/1.1 200 OK
< date: Thu, 01 Oct 2020 03:07:33 GMT
< content-type: text/html; charset=utf-8
< content-length: 9593
< connection: keep-alive
< server: gunicorn/19.9.0
Connect time: 210 ms, 805 μs, and 9 hnsecs
Request send time: 293 μs and 2 hnsecs
Response recv time: 205 ms, 378 μs, and 9 hnsecs
< access-control-allow-origin: *
[vibe-6(ZLjs) INF] < access-control-allow-credentials: true
response code: 200
Connect time: 210 ms, 749 μs, and 6 hnsecs
Request send time: 307 μs and 6 hnsecs
Response recv time: 205 ms and 922 μs
[vibe-3(cfzw) INF] response code: 200

Reply via email to