Simple web server benchmark - vibe.d is slower than node.js and Go?
Arun Chandrasekaran
aruncxy at gmail.com
Wed May 9 19:12:18 UTC 2018
On Monday, 30 October 2017 at 17:23:02 UTC, Daniel Kozak wrote:
> Maybe this one:
>
> import vibe.d;
> import std.regex;
> import std.array : appender;
>
> static reg = ctRegex!"^/greeting/([a-z]+)$";
>
> void main()
> {
> setupWorkerThreads(logicalProcessorCount);
> runWorkerTaskDist(&runServer);
> runApplication();
> }
>
> void runServer()
> {
> auto settings = new HTTPServerSettings;
> settings.options |= HTTPServerOption.reusePort;
> settings.port = 3000;
> settings.serverString = null;
> listenHTTP(settings, &handleRequest);
> }
>
> void handleRequest(HTTPServerRequest req,
> HTTPServerResponse res)
> {
> switch(req.path)
> {
> case "/": res.writeBody("Hello World", "text/plain");
> break;
> default:
> auto m = matchFirst(req.path, reg);
> string message = "Hello, ";
> auto app = appender(message);
> app.reserve(32);
> app ~= m[1];
> res.writeBody(app.data, "text/plain");
> }
> }
>
> On Mon, Oct 30, 2017 at 5:41 PM, ade90036 via Digitalmars-d <
> digitalmars-d at puremagic.com> wrote:
>
>> On Thursday, 21 September 2017 at 13:09:33 UTC, Daniel Kozak
>> wrote:
>>
>>> wrong version, this is my letest version:
>>> https://paste.ofcode.org/qWsQi kdhKiAywgBpKwANFR
>>>
>>> On Thu, Sep 21, 2017 at 3:01 PM, Daniel Kozak
>>> <kozzi11 at gmail.com> wrote:
>>>
>>> my version: https://paste.ofcode.org/RLX7GM6SHh3DjBBHd7wshj
>>>>
>>>> On Thu, Sep 21, 2017 at 2:50 PM, Sönke Ludwig via
>>>> Digitalmars-d < digitalmars-d at puremagic.com> wrote:
>>>>
>>>> Am 21.09.2017 um 14:41 schrieb Vadim Lopatin:
>>>>>
>>>>> [...]
>>>>>>
>>>>> Oh, sorry, I forgot the reusePort option, so that multiple
>>>>> sockets can listen on the same port:
>>>>>
>>>>> auto settings = new HTTPServerSettings("0.0.0.0:3000");
>>>>> settings.options |= HTTPServerOption.reusePort;
>>>>> listenHTTP(settings, &handleRequest);
>>>>>
>>>>
>> Hi, would it be possible to re-share the example of vibe.d
>> woth multithreaded support.
>>
>> The pastebin link has expired and the pull request doesnt have
>> the latest version.
>>
>> Thanks
>>
>> Ade
With vibe.d 0.8.2, even when multiple worker threads are setup,
only one thread handles the requests:
```
import core.thread;
import vibe.d;
import std.experimental.all;
auto reg = ctRegex!"^/greeting/([a-z]+)$";
void main()
{
writefln("Master %d is running", getpid());
setupWorkerThreads(logicalProcessorCount + 1);
runWorkerTaskDist(&runServer);
runApplication();
}
void runServer()
{
auto settings = new HTTPServerSettings;
settings.options |= HTTPServerOption.reusePort;
settings.port = 8080;
settings.bindAddresses = ["127.0.0.1"];
listenHTTP(settings, &handleRequest);
}
void handleRequest(HTTPServerRequest req,
HTTPServerResponse res)
{
writeln("My Thread Id: ", to!string(thisThreadID));
// simulate long runnig task
Thread.sleep(dur!("seconds")(3));
if (req.path == "/")
res.writeBody("Hello, World! from " ~
to!string(thisThreadID), "text/plain");
else if (auto m = matchFirst(req.path, reg))
res.writeBody("Hello, " ~ m[1] ~ " from " ~
to!string(thisThreadID), "text/plain");
}
```
That could be the reason for slowness.
More information about the Digitalmars-d
mailing list