Simplified socket creation and handling

Jarl André" <jarl.andre at gmail.com> Jarl André" <jarl.andre at gmail.com>
Wed May 23 06:39:08 PDT 2012


On Saturday, 19 May 2012 at 20:33:49 UTC, Nathan M. Swan wrote:
> On Friday, 18 May 2012 at 06:35:59 UTC, Jarl André wrote:
>> I am a Java developer who is tired of java.nio and similar 
>> complex socket libraries.
>>
>> In Java you got QuickServer, the ultimate protocol creation 
>> centered socket library. You don't have to write any channels 
>> and readers and what not. You just instantiate a server, 
>> configures the handlers (fill in classes that extends a 
>> handler interface) and there you go.
>>
>> Shouldn't there exist a similar library in any programming 
>> language? Not doing so is assuming that developers always need 
>> control of the lower layers. Its not true. I care about 
>> protocol. Not sockets.
>>
>> Is there any abstraction layers in phobos? Or is everything 
>> just as complex as before?
>
> Check out arsd:
> https://github.com/adamdruppe/misc-stuff-including-D-programming-language-web-stuff
>
> I used cgi.d to make my own server easily (compile with 
> -version=embedded_httpd). If you want more lower-level control, 
> try a ListeningConnectionManager. To see how it's used, look at 
> the code starting on line #1926.
>
> It has some pitfalls (e.g. I can't find a good way to stop the 
> server), but it is very nice in _easily_ starting up, with 
> _zero_ config.
>
> NMS

Thanks. It looks like a good option.

As it turns out I am very interested in having complete control 
of what type of service I am creating, so a library limiting me 
in some ways are not an option. On the other hand, I have 
investigated the listener example and have found out that I 
needed to generalize it a bit. Make a few interfaces, some 
implementations and my initial goal is to have end user code look 
excactly like QuickServers in Java. Why? Because sometimes you 
need simple command servers, lets say for polling an email or 
checking hardware status on a server and report it back, not 
worrying about blocking and async or whatever about sockets.

Another great advantage of making a "QuickServer" library is that 
its inner content can be replaced in the future without the end 
users knowing about. I have come far in the library making, but 
need some help understanding std.socket:

1.a. What is SocketSet and why do I need to pass it to 
Socket.select?
1.b. I only want to accept new sockets and I think its too much 
code for that

Even if questions is stupid please comment/correct me.


More information about the Digitalmars-d-learn mailing list