D simple web server
Rémy Mouëza
remy.moueza at gmail.com
Sat Aug 31 11:44:46 PDT 2013
Your code seems rather nice.
That said, here are some remarks of a purely stylistic nature :-) :
- You can use "foreach" instead of "for" to simplify your loop
statements over arrays and other collections:
auto array = [1, 2, 3];
foreach (item; array) {
writeln (item);
}
foreach can also support indexed iteration of your items:
auto array = ["a", "b", "c"];
foreach (index, item; array) {
writefln ("%d: %s", index, item);
}
and if you just want to iterate a certain amount of time, you can use
ranges:
foreach (index; 1..100) {
writeln (index);
}
- You don't have to put each class in a different file: you still can do
if you prefer it that way.
- I tend to prefer to have class members of same visibility grouped
together under a "public:", "protected:" or "private:" block, either
using the colon or the braces instead of always specifying the
visibility - this kind of help me better understand what will be useful
when using the class.
- Associative arrays can be initialized with literals, so instead of
having lots of:
status_message[100] = "Continue";
status_message[101] = ...
...
status_message[505] = "HTTP Version not supported";
you can use:
status_message = [
100: "Continue",
101: ...
505: "HTTP Version not supported"
];
which I find more concise.
- You can also use unified function calls:
instead of: to!string(port)
you can do: port.to!string
the latter having a more "English" feel when reading.
Again, these are purely stylistic considerations, D's flexibility allows
you to choose from many styles.
On a design standpoint, I would have preferred a delegate for the
processRequest() method instead of requiring the users to derive from
the WebServer class - on second thought, that may too be a stylistic
issue :-) .
Also related: I have started to write some high level bindings to the
Mongoose embedded webserver library, written in C (using Jacob
Carlsberg's dstep for the low level bindings). The source code is
available here: https://github.com/remy-j-a-moueza/mongooseD .
You may find some stuff to reuse or get inspiration from for your server.
Adam Ruppe also has a lot of interesting tools beyond the basic web
serving that you may get interested in
(https://github.com/adamdruppe/misc-stuff-including-D-programming-language-web-stuff).
On 08/31/2013 06:42 PM, gedaiu wrote:
> Hi,
>
> Because I have a personal project based on a custom web server, and I
> couldn't find one implemented in D(excepting vibe.d), I started to
> implement some web server classes in D with the hope that my work will
> be useful to someone else as well. If you are interested in this
> project, or if you want to contribute to it, here is the link to the git
> repository:
>
> https://github.com/gedaiu/DSWS
>
> Also, I don't have a lot of experience with D and I would apreciate if
> someone would like to spare some time for a code review for my work.
>
> Thanks,
> Bogdan
More information about the Digitalmars-d-announce
mailing list