D simple web server

gedaiu szabobogdan at yahoo.com
Tue Sep 3 05:08:57 PDT 2013


Thanks for reply,

@Adam D. Ruppe I ignored your collection of tools but is not very 
good documented...

@Rémy Mouëza When I started my project, I wanted to use mongoose 
but there where no bindings for D at that time, so I decided to 
use a simpler web server, libmicrohttpd, but it was not the best 
solution because my server where crashing all the time, so I 
decided to create one from scratch in D.

I made an update to the code and I added the option to initialize 
the terver using delegates.

Thanks,
Bogdan




On Saturday, 31 August 2013 at 18:44:47 UTC, Rémy Mouëza wrote:
> 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