Re: Announcing Rev: a high performance event library for Ruby 1.9

2007-12-29 Thread Thomas Hurst
* Tony Arcieri ([EMAIL PROTECTED]) wrote:

 Thanks, I'll get that addressed as well.  You might notice the painful
 lack of tests... I'd like to use RSpec but that's unfortunately broken
 by 1.9changes at the moment.  Perhaps I could use Rubinius's minispec
 if that's working on 1.9, but my guess is I'll have to end up using
 Test::Unit for the time being.

mspec seems to work.  After changing target in mspec/scripts/mspec.rb
from shotgun/rubinius to ruby19, I can do:

 -% ruby19 bin/mspec spec/core/fixnum/*
 Started
 ...F... (etc)

  Few other issues: spurious closed connections [..]
 I may have a fix for that shortly... I'll ping you off list if I do

Thanks.

  Servers don't serve much; they serve one client and exit even in the
  exception-free case, including the example echo server.  Multiple
  clients will be served if they manage to connect before the rest
  close, but once the listen queue's empty Rev::Loop#run returns.
 
 Bizzare.  I don't presently have a FreeBSD system, although I plan on
 installing FreeBSD later tonight actually, so I can test there.

I just tried on my laptop which is running Ubuntu; behavior's identical
to FreeBSD with epoll and select.

Also, :backend = :kqueue makes it crash horribly there ;)

 I'm using kqueue on MacOS X and have not experienced that problem, nor
 have I experienced the problem with Linux/epoll.
 
 I'm curious how that's even happening as the listen socket should be
 open and the Rev::Listener object should still be attached to the
 loop.

Further testing shows this doesn't happen if I use small writes, so it
seems to be related to buffering.  I can't see any immediately obvious
reason why, though.

-- 
Thomas 'Freaky' Hurst
http://hur.st/

___
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev


Re: Announcing Rev: a high performance event library for Ruby 1.9

2007-12-29 Thread Thomas Hurst
* Tony Arcieri ([EMAIL PROTECTED]) wrote:

 I've just made my initial public release of Rev, a high performance
 event library for Ruby 1.9 built on top of libev. Events are monitored
 with advanced system calls including epoll on Linux, kqueues on BSD,
 and event ports on Solaris.

Yum, thanks :)

Buffered writing seems to be broken; the buffer is sliced incorrectly,
so it spins writing the last few KB, and the Watcher doesn't have an
enabled? method so that fails if it ever reaches it.  Patch:

  http://voi.aagh.net/rev-0.1.0_lib-rev-buffered_io.rb.diff

Few other issues: spurious closed connections - if I do one big write
I'm ok, but splitting a 500k buffer into 4k writes almost always results
in a closed stream IOError on the second write, and a ECONNRESET on the
reading side.

Servers don't serve much; they serve one client and exit even in the
exception-free case, including the example echo server.  Multiple
clients will be served if they manage to connect before the rest close,
but once the listen queue's empty Rev::Loop#run returns.

This is tested with FreeBSD 6.2, using kqueue, select and poll.

-- 
Thomas 'Freaky' Hurst
http://hur.st/

___
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev


Re: Announcing Rev: a high performance event library for Ruby 1.9

2007-12-29 Thread Marc Lehmann
On Sat, Dec 29, 2007 at 01:21:43AM +, Thomas Hurst [EMAIL PROTECTED] 
wrote:
 Also, :backend = :kqueue makes it crash horribly there ;)

libev doesn't require too much error handling, except when initialising an
event loop. the perl interface does something like this:

   default_loop
  or die 'EV: cannot initialise libev backend. bad $ENV{LIBEV_FLAGS}?';

The message for Rev could be similar (and obviously include the :backend
= xxx case).

-- 
The choice of a   Deliantra, the free code+content MORPG
  -==- _GNU_  http://www.deliantra.net
  ==-- _   generation
  ---==---(_)__  __   __  Marc Lehmann
  --==---/ / _ \/ // /\ \/ /  [EMAIL PROTECTED]
  -=/_/_//_/\_,_/ /_/\_\

___
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev


Announcing Rev: a high performance event library for Ruby 1.9

2007-12-25 Thread Tony Arcieri
Hello everyone,

I've just made my initial public release of Rev, a high performance event
library for Ruby 1.9 built on top of libev. Events are monitored with
advanced system calls including epoll on Linux, kqueues on BSD, and event
ports on Solaris.  You can read more about libev here:
http://software.schmorp.de/pkg/libev.html

The release has not yet reached the gem mirrors, so you can grab it here for
the time being:

http://rev.rubyforge.org/releases/gems/rev-0.1.0.gem

Rev gives you the ability to monitor Ruby IO objects for readability and/or
writability.  It also lets you configure either one-shot or periodic
timers.  Future plans include wrappers for monitoring signals as well as
filesystem events.

Rev makes use of a number of new Ruby 1.9 features, namely the ability to do
blocking calls inside of native threads using the
rb_thread_blocking_region() function.  The entire event loop is written with
scalability in mind, with nearly constant time overhead compared to the
number of events being monitored, at least on Linux, FreeBSD, or Solaris.

In addition to a C extension which provides Ruby bindings to libev, Rev also
provides asynchronous observer-like wrappers for Ruby's core socket classes
using the new Ruby 1.9 *_nonblock methods.  It also provides asynchronous
DNS resolution for the purpose of making outgoing connections.

You can view the RDoc here:

http://rev.rubyforge.org/

Enjoy!

-- 
Tony Arcieri
ClickCaster, Inc.
[EMAIL PROTECTED]
___
libev mailing list
libev@lists.schmorp.de
http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev