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
next prev 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