[ANN] Mongrel HTTP Library 0.2.0 (Fast And RubyForgified)

Hi Everyone,

I'm happy to announce the 0.2.0 release of Mongrel -- the fastest HTTP 1.1 library Ruby has yet.

http://mongrel.rubyforge.org/ -- ruby docs lame page.
http://rubyforge.org/projects/mongrel/ -- project page.

Special thanks to Tom Copland for setting up my RubyForge goodness, and to Why for kicking in time to get the Camping examples up to snuff.

This release should strike a good balance between being fast and being stable on all platforms.

== Gems And Source

You can get this release of Mongrel via RubyGems in the usual way:

   gem install mongrel

Please let me know if this don't install. You can also hit the project page and download a full .tgz source file if you hate RubyGems.

== Status

This release mostly just focuses on the core of Mongrel. I've done just about everything I know to make it the fastest thing possible short of sacrificing goats and small children (but there was this one dude on IRC). I'll leave it to others to compare for now but the main purpose of this release is to do any final fine tunings and really pound on it to make it stable.

The other major change is that the HttpResponse class is now fully functioning and should be easy for people to use. It does not support the CGI library yet but I've got devious evil plans to set my skills on the CGI library as well.

== Example

This example is from the examples/simpletest.rb file:

require 'mongrel'

  class SimpleHandler < Mongrel::HttpHandler
     def process(request, response)
       response.start(200) do |head,out|
         head["Content-Type"] = "text/plain"
         out.write("hello!\n")
       end
     end
  end

  h = Mongrel::HttpServer.new("0.0.0.0", "3000")
  h.register("/test", SimpleHandler.new)
  h.run.join

Doesn't really do much but demonstrates the main meat of the system. Why has also written some Camping (http://rubyforge.org/projects/camping) samples which should work with the svn version of Camping.

== Next Steps

I'd love for people to break the hell out of it and post me some bug reports. I've tried to do everything I can, but I'm going to get ahold of some HTTP fuzzing stuff and see if I can't do any further damage.

I'm also looking for smart people who might have opinions on Mongrel, what it does, and specifically how you can see using it with your web application framework. Feel free to join the Mongrel mailing list at http://rubyforge.org/mailman/listinfo/mongrel-users and start tossing the ideas around.

Enjoy and let me know what you think.

Zed A. Shaw
http://www.zedshaw.com/

Hello Zed,

thanks for your great work. Just wanted to let you know that there is
a mongrel adapter for Nitro
(submitted by a member of the community) in the repository version.
Will be released next week.

regards,
George.

···

--
http://www.gmosx.com
http://www.nitrohq.com
http://www.navel.gr

Zed Shaw wrote:

Hi Everyone,

I'm happy to announce the 0.2.0 release of Mongrel -- the fastest
HTTP 1.1 library Ruby has yet.

http://mongrel.rubyforge.org/ -- ruby docs lame page.
http://rubyforge.org/projects/mongrel/ -- project page.

Special thanks to Tom Copland for setting up my RubyForge goodness,
and to Why for kicking in time to get the Camping examples up to snuff.

Nitpick:

http11.c: In function `URIClassifier_init':
http11.c:286: warning: control reaches end of non-void function

I'm not sure what that function is supposed to do, actually. The rdoc
say it creates a new URIClassifier object, but the function just stores
an empty hash in @id_handler_map.

And, at the risk of sounding like an old fuddy duddy, please change the
"sucks ass" stuff to something a little less juvenile please.

Thanks,

Dan

I missed the first announcement for this. Has it always been this fast
because of the use of C or are you slowly in the process of moving
things over? I ask this as this really is a tailor made project to
make use of RubyInline, allowing selective performance improvements in
C conditionally dependent on whether or not a compiler is available.

Looks good though, keep up the good work.

Charlie

Hmm, nice feature would be able to stop a running server...

-Brian

···

On Jan 30, 2006, at 10:30 PM, Zed Shaw wrote:

Hi Everyone,

I'm happy to announce the 0.2.0 release of Mongrel -- the fastest HTTP 1.1 library Ruby has yet.

http://mongrel.rubyforge.org/ -- ruby docs lame page.
http://rubyforge.org/projects/mongrel/ -- project page.

Special thanks to Tom Copland for setting up my RubyForge goodness, and to Why for kicking in time to get the Camping examples up to snuff.

This release should strike a good balance between being fast and being stable on all platforms.

== Gems And Source

You can get this release of Mongrel via RubyGems in the usual way:

  gem install mongrel

Please let me know if this don't install. You can also hit the project page and download a full .tgz source file if you hate RubyGems.

== Status

This release mostly just focuses on the core of Mongrel. I've done just about everything I know to make it the fastest thing possible short of sacrificing goats and small children (but there was this one dude on IRC). I'll leave it to others to compare for now but the main purpose of this release is to do any final fine tunings and really pound on it to make it stable.

The other major change is that the HttpResponse class is now fully functioning and should be easy for people to use. It does not support the CGI library yet but I've got devious evil plans to set my skills on the CGI library as well.

== Example

This example is from the examples/simpletest.rb file:

require 'mongrel'

class SimpleHandler < Mongrel::HttpHandler
    def process(request, response)
      response.start(200) do |head,out|
        head["Content-Type"] = "text/plain"
        out.write("hello!\n")
      end
    end
end

h = Mongrel::HttpServer.new("0.0.0.0", "3000")
h.register("/test", SimpleHandler.new)
h.run.join

Doesn't really do much but demonstrates the main meat of the system. Why has also written some Camping (http://rubyforge.org/projects/camping\) samples which should work with the svn version of Camping.

== Next Steps

I'd love for people to break the hell out of it and post me some bug reports. I've tried to do everything I can, but I'm going to get ahold of some HTTP fuzzing stuff and see if I can't do any further damage.

I'm also looking for smart people who might have opinions on Mongrel, what it does, and specifically how you can see using it with your web application framework. Feel free to join the Mongrel mailing list at http://rubyforge.org/mailman/listinfo/mongrel-users and start tossing the ideas around.

Enjoy and let me know what you think.

Zed A. Shaw
http://www.zedshaw.com/

Zed Shaw <zedshaw@zedshaw.com> writes:

Hi Everyone,

I'm happy to announce the 0.2.0 release of Mongrel -- the fastest
HTTP 1.1 library Ruby has yet.

Any immediate idea about the following?

% ruby simpletest.rb
/local/ruby-1.8.4/lib/ruby/site_ruby/1.8/mongrel.rb:28:in `initialize': uninitialized constant Mongrel::URIClassifier::TrieNode (NameError)
        from /local/ruby-1.8.4/lib/ruby/site_ruby/1.8/mongrel.rb:61:in `initialize'
        from simpletest.rb:13

This is Ruby 1.8.4 compiled 64-bit on Solaris/SPARC. Installed the
0.2.0 gem and it built with just a single warning:

"ext/http11/http11_parser.rl", line 49: warning: statement not reached

Steve

Oh, so very cool. I'll hit you guys up on #nitro to get the details and play with it.

···

On Jan 31, 2006, at 6:58 AM, George Moschovitis wrote:

Hello Zed,

thanks for your great work. Just wanted to let you know that there is
a mongrel adapter for Nitro
(submitted by a member of the community) in the repository version.
Will be released next week.

regards,
George.

--
http://www.gmosx.com
http://www.nitrohq.com
http://www.navel.gr

Hmm, nice feature would be able to stop a running server...

Until I get a real server architecture up you'll have to rely on the magic of CTRL-C technology. It's mostly just a core library now with some ambitious folks making their own servers.

···

On Feb 1, 2006, at 5:22 PM, Brian McCallister wrote:

On Jan 30, 2006, at 10:30 PM, Zed Shaw wrote:

Hi Everyone,

I'm happy to announce the 0.2.0 release of Mongrel -- the fastest HTTP 1.1 library Ruby has yet.

You probably have an older version lying around somewhere. That missing class is from the 0.1.1 release. Try looking for all mongrel.rb files and http11.so (.dll, .bundle) and remove them, then reinstall. Maybe a gem vs. source install conflict?

I'll look at that compile warning too.

Zed A. Shaw

···

On Feb 1, 2006, at 7:46 PM, Steven Lumos wrote:

Zed Shaw <zedshaw@zedshaw.com> writes:

Hi Everyone,

I'm happy to announce the 0.2.0 release of Mongrel -- the fastest
HTTP 1.1 library Ruby has yet.

Any immediate idea about the following?

% ruby simpletest.rb
/local/ruby-1.8.4/lib/ruby/site_ruby/1.8/mongrel.rb:28:in `initialize': uninitialized constant Mongrel::URIClassifier::TrieNode (NameError)
        from /local/ruby-1.8.4/lib/ruby/site_ruby/1.8/mongrel.rb:61:in `initialize'
        from simpletest.rb:13

This is Ruby 1.8.4 compiled 64-bit on Solaris/SPARC. Installed the
0.2.0 gem and it built with just a single warning:

"ext/http11/http11_parser.rl", line 49: warning: statement not reached

Steve

Zed Shaw <zedshaw@zedshaw.com> writes:

You probably have an older version lying around somewhere. That
missing class is from the 0.1.1 release. Try looking for all
mongrel.rb files and http11.so (.dll, .bundle) and remove them, then
reinstall. Maybe a gem vs. source install conflict?

Of course that was it. Thanks.

Steve

···

I'll look at that compile warning too.

Zed A. Shaw

On Feb 1, 2006, at 7:46 PM, Steven Lumos wrote:

Zed Shaw <zedshaw@zedshaw.com> writes:

Hi Everyone,

I'm happy to announce the 0.2.0 release of Mongrel -- the fastest
HTTP 1.1 library Ruby has yet.

Any immediate idea about the following?

% ruby simpletest.rb
/local/ruby-1.8.4/lib/ruby/site_ruby/1.8/mongrel.rb:28:in
initialize': uninitialized constant
Mongrel::URIClassifier::TrieNode (NameError)
        from /local/ruby-1.8.4/lib/ruby/site_ruby/1.8/mongrel.rb:
61:in `initialize'
        from simpletest.rb:13

This is Ruby 1.8.4 compiled 64-bit on Solaris/SPARC. Installed the
0.2.0 gem and it built with just a single warning:

"ext/http11/http11_parser.rl", line 49: warning: statement not reached

Steve