Puma: A Ruby Web Server Built For Concurrency
github.com
github.com
you say it is using ragel; mongrel also uses ragel[2]. mongrel and z.shaw are even mentioned on the ragel project page. (and ragel is mentioned on the mongrel page[3])
sorry but i think puma could be more upfront about being an innovation on top of mongel.
otherwise nice work! code looks indeed very clean compared to unicorn/rainbows and zbattery.
[1]: https://github.com/evanphx/puma/tree/master/ext/puma_http11 [2]: http://www.complang.org/ragel/ (mentions mongrel) [3]: https://github.com/mongrel/mongrel
This commit lends to that story as well: https://github.com/evanphx/puma/commit/1888887d8ff8fdf4954c3...
I agree though, would be nice to mention its heritage in the read me.
Mustache deserunt yr viral. Ut farm-to-table velit ethical put a bird on it officia, qui yr lomo.
Nesciunt organic voluptate mcsweeney's, vinyl et skateboard 3 wolf moon mollit dreamcatcher blog.
I hear you guys in the comments saying events is the way to go for concurrency in Ruby, especially with MRI. As many also know, GIL-less threads are available in modern Ruby VMs like Rubinius and JRuby.
I haven't tried puma yet, but I do believe in evanphx's work.
Also, for those interested in concurrency with Ruby, also check out: https://github.com/tarcieri/celluloid and https://github.com/tarcieri/nio4r .. looks like Tony even has a fork of puma in there too.
I have it running on my Heroku instance for a day or so with no issues, though I don't get any traffic yet. :)
What about this product makes it better than the other options?
https://github.com/evanphx/puma/blob/master/lib/puma/thread_...
Events are not a substitute for Threads, and Threads are really not as hard as people would like to claim when you're working at the level of an application developer.
Keep in mind that hundreds of thousands (wild guess) .NET developers have worked with both Threads and Events for years in WinForms and WebForms without much trouble. Because 99% of the time as long as you follow a few simple rules about what you're passing to an event, and you use built-in thread-safe collections along with the occasional custom double-lock, you're going to be safe. The framework takes care of most of it for you.
Disclaimer: Having little experience with Node.js and some of the other new-ish evented frameworks, the following observation is probably at least somewhat off-base. But it occurred to me the other day that in a lot of ways many OSS projects are trending towards popularizing a model Microsoft mainstreamed (at least in my limited decade-plus experience). ie: "Delegate All The Things!"
Wasn't really a fan of it then (there are definitely advantages, but I think you can make the claim it went entirely too far) and I guess that's what left a sour taste in my mouth when anyone brings up Evented programming as some sort of silver bullet.
In addition to that, considering my experience with Thread Pooling and Events, it always strikes me as odd when they're presented as competing solutions. They work best together IMO, as they're complementary techniques, not competing. If you need shared state, brokers and/or IPC are a poor substitute for the performance of Threads (IME). Plus they're much more complex if you have a robust set of Thread Safe libraries to draw on.
I'm not sure if it's considered production ready yet though.
puma's README wording make it seem like the Ragel parser is some new thing unique to Puma, and doesnt mention Zed. no wonder he hatest rubyists
also, thin has had a --threaded flag for years