Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Gerd Stolpmann <info@gerd-stolpmann.de>
To: Jeffrey Barber <jeff@mathgladiator.com>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] node.ocaml
Date: Tue, 24 Aug 2010 01:29:48 +0200	[thread overview]
Message-ID: <1282606188.3357.422.camel@thinkpad> (raw)
In-Reply-To: <AANLkTinRDkL+Bk+6CB+zSONqq5+LFk31sFRUuSmH9t22@mail.gmail.com>

You may also look at ocamlnet
(http://projects.camlcity.org/projects/ocamlnet.html), which provides a
stack of abstractions for event-driven programming:

- The Netsys library defines an object type for sets of file
  descriptors one can poll:

http://projects.camlcity.org/projects/dl/ocamlnet-3.0test5/doc/html-main/Netsys_pollset.pollset.html

  There is right now only an implementation for poll(), but
  no fancy things like what libevent provides (but this is 
  just lack of time).

- Above that, there is the equeue library with its main
  interface Unixqueue:

http://projects.camlcity.org/projects/dl/ocamlnet-3.0test5/doc/html-main/Unixqueue.html

  This provides a queue of events, and a mechanism to consume
  events.

- Above that, there is the engines API:

http://projects.camlcity.org/projects/dl/ocamlnet-3.0test5/doc/html-main/Uq_engines.html

  This is an abstraction allowing easy composition of code. An
  engine represents a suspended I/O operation to which one can
  attach continuations.

There are even implementations of high-level protocols using these APIs
(most hooking in at the Unixqueue level), and this includes HTTP,
Telnet, FTP (partly), and SunRPC. Companies are using this already in
products, so this is really a mature implementation. 

It is interesting that in your code the callbacks are implemented on the
C side. I think this is generally more complicated than doing the same
in Ocaml which is way more a "callback-friendly" language.

Gerd

Am Samstag, den 21.08.2010, 22:27 -0500 schrieb Jeffrey Barber:
> I've been working with libevent2 and OCaml for the past couple of
> weeks to build node.ocaml. It is far from done, but it is interesting
> enough to share.
> 
> node.ocaml as of now contains a web server and a terminal server that
> provides asynchronous programming to OCaml to enable some of my
> research. The first example server is a key value pair server that
> brings OCaml's Hashtbl to http and terminal IO:
> 
> example code:
> http://github.com/mathgladiator/node.ocaml/blob/master/test/kvp.ml
> 
> This is the first test program, and it works fairly well in a single
> threaded environment. I was inspired by node.js to build an evented io
> system, and so I begged the question "how does 'OCaml's FFI' compare
> with v8's in node.js". In my virtual machine environment (ubuntu
> 10.04), I got the following results doing 10,000 requests 50 at a
> time:
> 
> node.js with the "Hello World" script:
> 2100 requests/second
> 
> node.ocaml with kvp.ml:
> 5300 requests/second
> 
> This seems to me to be a very positive first benchmark considering I
> haven't optimized anything yet nor have I hacked caml_copy_string yet.
> 
> The code is licensed under BSD and available
> http://github.com/mathgladiator/node.ocaml .
> 
> Any thoughts/questions are appreciated; thank you for your time.
> 
> -J
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs


-- 
------------------------------------------------------------
Gerd Stolpmann, Bad Nauheimer Str.3, 64289 Darmstadt,Germany 
gerd@gerd-stolpmann.de          http://www.gerd-stolpmann.de
Phone: +49-6151-153855                  Fax: +49-6151-997714
------------------------------------------------------------


      parent reply	other threads:[~2010-08-23 23:29 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-22  3:27 node.ocaml Jeffrey Barber
2010-08-23 21:31 ` [Caml-list] node.ocaml Jake Donham
2010-08-23 22:32   ` Jeffrey Barber
2010-08-23 23:29 ` Gerd Stolpmann [this message]

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=1282606188.3357.422.camel@thinkpad \
    --to=info@gerd-stolpmann.de \
    --cc=caml-list@inria.fr \
    --cc=jeff@mathgladiator.com \
    /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