Re: ANS interleaving (was: Asynchronous BEEP draft status)

"Sam Roberts" <[email protected]> Wed, 26 Nov 2008 21:24:36 -0800
Newsgroups gmane.ietf.beep
Message-ID <[email protected]>
On Wed, Nov 26, 2008 at 8:09 PM, Thomson, Martin
<[email protected]> wrote:
> Hi Sam,
>
> You state that ANS interleaving is a useful feature of the protocol, and then point out that almost no-one bothers to implement it.

Implementors are having enough trouble getting basic communication going!

Beepy and beep4j wouldn't communicate at all when we first tried,
beepy had broken SEQ handling, and beep4j had broken MIME header
format parsing, and beepcore-c wouldn't talk to vortex. I haven't
tried the first two against the latter two, yet. Hopefully it will go
well.

> Can you provide a use case?

But those gripes aside, I sure can. Both for an ANS, and just
generally for transferring files larger than should be manipulated
in-memory.

RFC3080: "in a one-to-many exchange,  multiple answers may be
simultaneously in progress"

MSG: <get-all-movies actress="uma thurman">

ANS: a movie, type and name defined in MIME headers, with Uma Thurman in it
...

The MSG would kick into gear a heavy duty search of known movie
download sites, and each ANS would be a single movie, sent as it is
found in small chunks (movies are big!), possibly multiple ones would
be found at once and sent.

Anyhow, like async channels, its a feature that you can do without,
you can build it on top of smaller message exchanges tied together by
identifiers that are not BEEP message numbers.

For example, we transfer large dynamically generated PDFs over BEEP.
With beepcore-c, as data is ready we would write out a frame of a RPY
(which might get further subdivided as needed to fit window size), but
instead we RPY with a "its coming at you soon with this message-id",
and then send each chunk of data as it is available with a MSG (which
gets an empty RPY).

Mind you, we reply before we actually process the request to generate
and send the file.

Actually, we have a "thin" UI client (beep4j) that uses BEEP to talk
to its server (heavily modified beepy), and almost everything that
happens on the client involves a MSG being sent to the server,
followed by an immediate RPY <ok/>, and then the server starts doing
whatever processing is required for the requested action.

Would you really consider our use of BEEP a massive conformance breach
of an RFC3080 "process before sending RPY" restriction on the
implementation of profiles?

Cheers,
Sam