AstonJ
Which webserver do you use?
We had a thread here recently that mentioned webservers in PHP, and it got me curious about the options in the BEAM world and what everyone is using. Which webservers do you use or plan to use in your apps? ![]()
You can select as many options as you like:
- Ace
- Bandit
- Chatterbox
- Cowboy
- Elli
- Erlang’s built in inets/httpd
- Mist
- Mochiweb
- Yaws
- Other - please say in thread!
Ace (Elixir)
HTTP web server and client, supports http1 and http2.
https://github.com/CrowdHailer/Ace
Bandit (Elixir)
Bandit is an HTTP server for Plug and Sock apps.
https://github.com/mtrudel/bandit
Chatterbox (Erlang)
HTTP/2 Server for Erlang.
https://github.com/joedevivo/chatterbox
Cowboy (Erlang)
Small, fast, modern HTTP server for Erlang/OTP.
https://github.com/ninenines/cowboy
Elli (Erlang)
Simple, robust and performant Erlang web server.
https://github.com/elli-lib/elli
Erlang’s built in inets/httpd
The HTTP server, also referred to as httpd, handles HTTP requests as described in RFC 2616 with a few exceptions, such as gateway and proxy functionality. The server supports IPv6 as long as the underlying mechanisms also do so.
Mist (Gleam)
A (hopefully) nice, pure Gleam web server.
https://github.com/rawhat/mist
MochiWeb (Erlang)
MochiWeb is an Erlang library for building lightweight HTTP servers.
https://github.com/mochi/mochiweb
Yaws (Erlang)
Yaws webserver
Most Liked
lpil
Great idea, I’d love to see some benchmarks of all of them.
We have some slightly out-of-date ones for some of the above here.
Mist came out fastest of the BEAM servers, and could sometimes beat Go depending on request body size.
One thing that really surprised me was how badly Cowboy handled request bodies. JavaScript was beating it as soon as there was a reasonable amount of data to read!
tristan
I’d expect to see similar numbers in a benchmark for Bandit and Elli since they both use Erlang’s http parser – which also means Bandit will have the same scaling issue Cowboy hit years ago that resulted in cowlib being created.
But for many many use cases Elli (or Bandit I suppose) work great ![]()
mtrudel
Bandit author here. Late to the party, but a couple of things:
-
I’ve looked for historical evidence of decode_packet’s supposed scalability issues but I can’t seem to find anything. Can you point me at some references?
-
Performance numbers in (synthetic) benchmarks suggest quite the opposite regarding the scalability of cowlib vs. decode_packet. When I was building out GitHub - mtrudel/network_benchmark · GitHub I had to give up on higher concurrency tests as I was unable to get Cowboy to complete them without massive error counts, whereas Bandit hummed along just fine (and indeed grew the performance gap even more on higher concurrency tests).
m.
Popular in Polls
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance











