I don't understand why this exists. Between BlueEyes, Spray, Unfiltered, Finagle, and probably others I have forgotten, I don't see the need for yet another asynch HTTP library.
All great libraries, all a little different from each other. Scala provides a lot of flexibility for designing solutions. On top of that it's a relatively new language with new open source projects appearing all the time, changing the landscape at an impressive rate. For instance, Smoke is built entirely on top of Akka 2.0, which was only released a few months ago but is an impressive step forward for parallelism on the JVM.
Combine Scala's flexibility with the importance of HTTP to so many of us, I'm not surprised (nor disappointed) to see a lot of variety in this space. I hope we'll see even more of them as the language matures.
We didn't see any of those libraries as an ideal solution to our problem so we built our own. If this solves a problem for you as well, I'd be happy to hear that. If not, I'd love to hear how you think it could be improved.
This looks cool. What's the use-case for it versus using something like Play! 2.0 + Akka for async HTTP?
As far as my limited knowledge of Play (learning it right now, so I could be far off), Play can do async HTTP and already makes use of internal Akka actors for handling requests.
Internally, we wanted a way to build and deploy HTTP services quickly and easily. We wanted them to be asynchronous and we wanted a DSL that developers familiar with HTTP would pick up on quickly, without a lot of additional research. We've been having a lot of success with the composable Futures in Akka 2.0 and wanted to set developers up to leverage the full power of the Akka toolkit (and boy, is it powerful).
It's much lighter weight than play2 or play2-mini (https://github.com/typesafehub/play2-mini built on top of play2). , but does provide some similar functionality. There's definitely a whole lot less code in Smoke. That may be a good thing or a bad thing, depending on your perspective.
Spray is a great library. It's full featured, with it's own Akka-based HTTP server and a full client lib.
Smoke is a smaller, more focused tool. You will find a lot of things Spray does that Smoke does not. Smoke has a significantly different DSL, relying on Akka's composable Futures to take care of things like error handling.
Smoke evolved through an attempt to build the simplest possible asynchronous HTTP services on top of Akka, without sacrificing any of the key features we needed to deploy those services at scale.
The goal of Smoke is not so much to compete with Spray as it is to provide an HTTP-service-focused alternative to Finagle (https://github.com/twitter/finagle) that uses Akka Futures instead of Twitter Futures, and includes everything we needed to build, test and deploy those services quickly.
Honestly, I lost track a while ago of all the new web development tools. I am so glad I'm no longer writing web applications, or I would spend more time learning about the tools than actually using them.
[+] [-] noelwelsh|14 years ago|reply
[+] [-] chrisdinn|14 years ago|reply
Combine Scala's flexibility with the importance of HTTP to so many of us, I'm not surprised (nor disappointed) to see a lot of variety in this space. I hope we'll see even more of them as the language matures.
We didn't see any of those libraries as an ideal solution to our problem so we built our own. If this solves a problem for you as well, I'd be happy to hear that. If not, I'd love to hear how you think it could be improved.
[+] [-] oacgnol|14 years ago|reply
As far as my limited knowledge of Play (learning it right now, so I could be far off), Play can do async HTTP and already makes use of internal Akka actors for handling requests.
[+] [-] chrisdinn|14 years ago|reply
It's much lighter weight than play2 or play2-mini (https://github.com/typesafehub/play2-mini built on top of play2). , but does provide some similar functionality. There's definitely a whole lot less code in Smoke. That may be a good thing or a bad thing, depending on your perspective.
[+] [-] jzoidberg|14 years ago|reply
https://github.com/spray/spray
[+] [-] chrisdinn|14 years ago|reply
Smoke is a smaller, more focused tool. You will find a lot of things Spray does that Smoke does not. Smoke has a significantly different DSL, relying on Akka's composable Futures to take care of things like error handling.
Smoke evolved through an attempt to build the simplest possible asynchronous HTTP services on top of Akka, without sacrificing any of the key features we needed to deploy those services at scale.
The goal of Smoke is not so much to compete with Spray as it is to provide an HTTP-service-focused alternative to Finagle (https://github.com/twitter/finagle) that uses Akka Futures instead of Twitter Futures, and includes everything we needed to build, test and deploy those services quickly.
So far, it's been working quite well for us.
[+] [-] whalesalad|14 years ago|reply
[+] [-] scottostler|14 years ago|reply
[+] [-] hello_asdf|14 years ago|reply
[+] [-] dkhenry|14 years ago|reply