Simple web server benchmark - vibe.d is slower than node.js and Go?

Daniel Kozak kozzi11 at gmail.com
Wed May 9 21:55:15 UTC 2018


On which system? AFAIK HTTPServerOption.reusePort works on Linux but maybe
not on others OSes. Other question is what events driver is use (libasync,
libevent, vibe-core)

On Wed, May 9, 2018 at 9:12 PM, Arun Chandrasekaran via Digitalmars-d <
digitalmars-d at puremagic.com> wrote:

> 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20180509/cc00db18/attachment.html>


More information about the Digitalmars-d mailing list