AstonJ

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? :003:

You can select as many options as you like:

Which webserver/s do you use or plan to use? (Select as many as you like)
  • Ace
  • Bandit
  • Chatterbox
  • Cowboy
  • Elli
  • Erlang’s built in inets/httpd
  • Mist
  • Mochiweb
  • Yaws
  • Other - please say in thread!
0 voters

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

https://github.com/erlyaws/yaws

Most Liked

lpil

lpil

Creator of Gleam

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!

10
Post #3
tristan

tristan

Rebar3 Core Team

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 :slight_smile:

mtrudel

mtrudel

Creator of Bandit

Bandit author here. Late to the party, but a couple of things:

  1. 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?

  2. 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.

Where Next?

Popular in Polls Top

AstonJ
What is your primary dev OS? And is there any software you’d like to recommend that could make development easier? (Apart from the code e...
New
AstonJ
Curious whether you remap your Caps Lock key.. Do you remap your Caps Lock key? poll I have no idea what Globe is btw, just seen it in t...
New
AstonJ
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 everyo...
New
AstonJ
Curious whether you’re using wired or wireless to connect to your main working machine to the internet - if you have any specific reasons...
New
Nezteb
poll The poll allows up to 2 votes for cases where people have a preferred tool for Elixir and a separate preferred tool for Erlang or th...
New
AstonJ
Do you use Dialyzer/Dialyxir in your Elixir projects? poll If you only use it in some of them, which ones? If you don’t use it, why not...
New
ryanswapp
I think it would be interesting to see how most people are using Phoenix in production. Do you use it as an API backend for a SPA? Or do ...
New
matt-savvy
I see some people adopt this convention when naming fields or variables where the value is a boolean. I personally see this as an antipat...
New
AstonJ
poll asdf Extendable version manager with support for Ruby, Node.js, Elixir, Erlang & more Manage multiple runtime versions with a ...
New
AstonJ
A terminal multiplexer is a software application that can be used to multiplex several separate pseudoterminal-based login sessions insid...
New

Other popular topics Top

sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
New
mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New
PeterCarter
There are pre-rolled solutions for other frameworks that do work. However, Phoenix does not seem to have these. Have people had good expe...
New
vegabook
I’m brand new to Phoenix and I have stripped one of the demo applications to the bone. I just want to get an svg up on the screen. Here i...
New
svb
Hi! Currently I want to submit a form by pressing the Enter key. However, since my input field is of type “textarea” this is just adds a...
New
lanycrost
Hi everyone! I need implement if…else if…else condition from my elixir code, and anymore of this control flow structures not work proper...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

We're in Beta

About us Mission Statement