Simplified socket creation and handling

Donald Duvall don.duvall at deduvall.com
Fri May 25 13:55:11 PDT 2012


On Friday, 25 May 2012 at 20:50:25 UTC, Donald Duvall wrote:
> On Wednesday, 23 May 2012 at 19:24:53 UTC, Jarl André wrote:
>> 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.
>
> Would it be possible for someone to write some documentation on 
> this socket server and make it windows compatible?
>
> I am just learning D and coming from C# sockets this is much 
> different and I understand it completely. I would much 
> appreciate any help with understanding sockets in D and any 
> pointers in the right direction.

Sorry for the typo: I do NOT understand it completely.


More information about the Digitalmars-d-learn mailing list