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 < [email protected]> 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 < >> [email protected]> 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 <[email protected]> >>>> wrote: >>>> >>>> my version: https://paste.ofcode.org/RLX7GM6SHh3DjBBHd7wshj >>>> >>>>> >>>>> On Thu, Sep 21, 2017 at 2:50 PM, Sönke Ludwig via Digitalmars-d < >>>>> [email protected]> 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. >
