caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Gerd Stolpmann <info@gerd-stolpmann.de>
To: caml-list@inria.fr
Subject: Re: [Caml-list] High level (asynchronous) networking library?
Date: Thu, 12 Jul 2001 22:37:52 +0200	[thread overview]
Message-ID: <01071222582913.00523@ice> (raw)
In-Reply-To: <F122M3oryKFRJrzdDW60000ab1d@hotmail.com>

On Thu, 12 Jul 2001, you wrote:
>I've been learning O'Caml for the past little bit, and after not finding any 
>high level asynchronous networking libraries (that is, libraries/modules for 
>writing high performance network servers), I figured I would write one, 
>since it seemed a non-trivial problem that wasn't too far out of my league.

You may have a look at Equeue:
http://www.ocaml-programming.de/packages/documentation/equeue/manual/

It implements an event queue, and you can attach "event sources" (such as file
descriptors) and event handlers. Because it is a queue, it is not very fast if
there are many events at the same time.

You may also look at my RPC implementation:
http://test.ocaml-programming.de/packages/documentation/rpc/

It bases on Equeue, and is an excellent example.

>Anyway, I've been looking at possible ways to write one.  In Python, I've 
>made quite a bit of use of the "asyncore" module 
>(http://www.nightmare.org/medusa/index.html), which is a very production 
>proven (it's the asynchronous networking engine used in Zope) and simple 
>framework for writing high performance asynchronous servers.  It seems that 
>implementing asyncore in O'Caml would be fairly straightforward, so I've 
>been putting it off a bit while I search for a possibly better solution.

The link does not work.

>Someone has written "asyncore turned inside out" using Stackless Python, an 
>implementation of Python that has first-class continuations) using 
>continuations to implement the apparent multi-tasking.  It apparently (I've 
>not used it myself) makes the asynchronous networking part of the coding a 
>little more transparent to the user than asyncore does.  I'm curious if 
>something similar could be implemented in O'Caml with closures, and if it 
>could achieve similar user-transparency.

You could do something like

let task1 arg cont =
  let before_call () = ... in
  let after_call () = ... in
  before_call();
  task2 arg' (fun () -> cont(); after_call())

(task2 in a similar way). "cont" is the function that continues. The problem is
that this scheme needs much memory, as every task switch allocates a new
closure. When the closure is evaluated, some stack space is needed, too, so
after some time there will be lots of half-evaluated closures, and a stack
overflow is very likely.

>Does anyone have any comments on any of the above options?  Are there other 
>options I'm not considering which could be better?  Are there any 
>implementations of what I want already?  What I'm looking for is as much 
>abstraction away from the low-level socket/select loops as is reasonable for 
>efficiency's sake.

Gerd
-- 
----------------------------------------------------------------------------
Gerd Stolpmann      Telefon: +49 6151 997705 (privat)
Viktoriastr. 45             
64293 Darmstadt     EMail:   gerd@gerd-stolpmann.de
Germany                     
----------------------------------------------------------------------------
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr


  parent reply	other threads:[~2001-07-12 20:58 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-07-12  5:31 Jeremy Fincher
2001-07-12  9:06 ` Markus Mottl
2001-07-12 12:14   ` Jeremy Fincher
2001-07-15  7:26     ` Ohad Rodeh
2001-07-12 20:37 ` Gerd Stolpmann [this message]
2001-07-14  2:29 ` John Max Skaller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=01071222582913.00523@ice \
    --to=info@gerd-stolpmann.de \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).