Simplified socket creation and handling

Jarl André" <jarl.andre at gmail.com> Jarl André" <jarl.andre at gmail.com>
Wed May 23 12:24:52 PDT 2012


On Wednesday, 23 May 2012 at 13:39:09 UTC, Jarl André wrote:
> 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.

And here it comes:

https://github.com/jarlah/d2-simple-socket-server

This is my object oriented contribution to the problem.

Based on closed/open principe, in that expansion is done by 
adding new classes and not modifying the existing code.

Comments are appreciated.


More information about the Digitalmars-d-learn mailing list