On Wednesday, 9 May 2018 at 21:55:15 UTC, Daniel Kozak wrote:
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.
Ubuntu 17.10 64 bit, DMD v2.079.1, E7-4860, 8 core 32 GB RAM.
With slight modifcaition to capture the timestamp of the request
on the server:
import std.datetime.systime : Clock;
auto tm = Clock.currTime().toISOExtString();
writeln(tm, " My Thread Id: ", to!string(thisThreadID));
// simulate long runnig task
Thread.sleep(dur!("seconds")(3));
if (req.path == "/")
res.writeBody(tm ~ " Hello, World! from " ~
to!string(thisThreadID), "text/plain");
Launch two parallel curls.. and here is the server log..
Master 13284 is running
[vibe-6(5fQI) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-7(xljY) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-2(FVCk) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-3(peZP) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-8(c5pQ) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-4(T/oM) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-5(zc5i) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-1(Rdux) INF] Listening for requests on http://0.0.0.0:8080/
[vibe-0(PNMK) INF] Listening for requests on http://0.0.0.0:8080/
2018-05-09T15:32:41.5424275 My Thread Id: 140129463940864
2018-05-09T15:32:44.5450092 My Thread Id: 140129463940864
2018-05-09T15:32:56.3998322 My Thread Id: 140129463940864
2018-05-09T15:32:59.4022579 My Thread Id: 140129463940864
2018-05-09T15:33:12.4973215 My Thread Id: 140129463940864
2018-05-09T15:33:15.4996923 My Thread Id: 140129463940864
PS: Your top posting makes reading your replies difficult