From: Andy Little (andy_at_[hidden])
Date: 2005-12-15 05:19:31
Some impressions of the Asio library, bearing in mind that I am a complete
novice in this area, so the impressions are written from an ignorant viewpoint!
I'm confused as to why the library is called after asynchronous input/output.
Should it not rather be called an asynchronous demultiplexer?
That would make clearer what the library is designed for. I would also like to
address the claims regarding scaleability. Perfect scaleability would enable me
to create and use a single connection without requiring to set up the
demultiplexer. As I understand it this is not the case. Simple jobs are affected
by the need for high performance in large volumes of connections. The library
seems to be about providing high volume network data services rather than about
asynchronous I/O in the abstract. I feel that the name is confusing therefore.
I would like an example useage of the library in the introduction that shows off
the library in the large scale application its designed for because that would
help to set the scene for the rest of the documentation and help to put right my
incorrect expectations of what the library is about and who it is targetted at..
Examples might be a network server or a router maybe ( If these are valid
applications of course) ... whatever.. something to help me to set the scene as
The first example I would like to see would involve showing how to save a file
asynchronously. This would IMO be a good example because it should allow anyone
to get a result without requiring the additional complexities of a network. I
presume one would have to invoke the demultiplexer for a single file, but at
least the demultiplexers raison d'aitre could be introduced here.. The two
initial tutorial examples discuss timers with timeout handlers. It is difficult
for me to see how these timers relate to asynchronous I/O. Why do I need the
demultiplexer to set up a timer anyway. Where is it leading? Why do Ihave a
multiplexer.run() function when the timer seems to have already started?.I need
more context for what this tutorial is telling me. The mechanical structureof
the library could be better explained before launching into the tutorial. e.g
"The asio library is centered around a demultiplexer which controls the lifetime
of asynchronous processes attached to it. An asynchronous process is governed by
a timer and a completion event , which signals the end of its lifetime". Or
whatever, but again a more detailed explanation of what I am dealing with would
be helpful. As it stands I am presented with a tutorial where I use a
demultiplexer without really having much idea why.
As far as the networking examples go, I would prefer to have an example set of
data provided so that I could get the examples to work immediately with out
requiring any knowledege of the protocol. Is it not possible for example to
download a sample web page from the asio doc site or something? As it stands I
get a cryptic message "The requested name is valid and was found in the
database, but it does not have the correct data being resolved for". (Even if I
put complete rubbish in). The"useage client <host>" error message on not
providing input parameters is equally cryptic, but I cant find any more detailed
information. BTW In the synchronous TCP daytime client example why does the
host resolver depend on the demultiplexerer? I feel that the design using the
demultiplexer is quite monolithic.
It seems from other comments, to be the case that the interface ( function names
etc) is based on existing networking libraries. If this is so then it ought to
be discussed in the documentation. A section on the features and issue with
other networking libraries and why their features were accepted/ rejected for
asio design would be nice, a rationale for the design decisions made.
My impressions are based on a very incomplete look at the library and little
experience of networking applications. Apologies for anything incorrect or
unintentionally abrupt in my review. Its obvious from other reviews that the
library is highly regarded by those experienced in the field. For myself, I
suspect the design used is rather monolithic and therefore not scaleable very
well in the down direction, however having little experience in this area I'm
not really in a position to suggest improvements. I'll be grateful for what I
can get therefore.
I vote Yes to accept the Asio librray into boost. Thanks to Christopher for the
time and effort he has put into it.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk