diff options
author | Loïc Hoguin <[email protected]> | 2025-02-13 18:07:17 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2025-02-13 18:07:17 +0100 |
commit | 548e971645543d3be355d569155959ba5a906656 (patch) | |
tree | 3705c8774f300da9f6090ff676241f7563b2b34d | |
parent | 72a4d4d2fa1f32c186889ae3a764093753827478 (diff) | |
download | ninenines.eu-548e971645543d3be355d569155959ba5a906656.tar.gz ninenines.eu-548e971645543d3be355d569155959ba5a906656.tar.bz2 ninenines.eu-548e971645543d3be355d569155959ba5a906656.zip |
Cowboy 2.13 performance article
71 files changed, 849 insertions, 39 deletions
diff --git a/_build/content/articles/cowboy-2.13.0-performance.asciidoc b/_build/content/articles/cowboy-2.13.0-performance.asciidoc new file mode 100644 index 00000000..22c0b7a7 --- /dev/null +++ b/_build/content/articles/cowboy-2.13.0-performance.asciidoc @@ -0,0 +1,144 @@ ++++ +date = "2025-02-13T07:00:00+01:00" +title = "Performance improvements in Cowboy 2.13" + ++++ + +Cowboy `2.13.0` is close to being released. Much of the +work done on this release focused on performance, and in +particular the performance of the Websocket protocol. + +The Websocket protocol requires clients to mask the data +they send, originally to avoid issues with proxies. This +requirement is still present for Websocket over HTTP/2 +nevertheless. This means that the server has to unmask +the data, which has a notable impact on performance. +Cowboy 2.13 will attempt to unmask 16 bytes at a time +instead of 4 previously, leading to a rouhgly 10% +faster processing of Websocket frames. + +Similarly, the Websocket protocol requires validating +that the data in text frames is valid UTF-8. This part +of the Websocket code was always highly optimised, but +changes in the VM made the optimisations less impactful. +The validation code was therefore rewritten, inspired +by the validation code in Erlang/OTP's new `json` module +(itself inspired by the validation in Cowboy!) and +Cowboy 2.13 is now 10% to 15% faster processing Websocket +text frames. + +Cowboy must keep track of the data coming in to detect +whether the client is still around, or gone. It does so +via a timeout that is reset when data is received. Since +it may receive a lot of data, there may be a lot of +timer resets, impacting performance. Cowboy 2.13 will +instead run a timer periodically with a timeout that is +a tenth of `idle_timeout`, and count how many times in +a row that timeout was triggered without receiving data. +This greatly reduces the number of times we set or reset +the timer and makes some Websocket scenarios 10% faster. + +These timer improvements were also brought to HTTP/2. + +Cowboy by default will not configure transport options, +because they are highly dependent on environment, so +anyone looking to get the best performance out of Cowboy +has to figure out the best values. One of these values +is the `buffer` option, which represents the size of +the socket's buffer on OTP's side. Its default is very +low (1460 bytes) and so performance is highly degraded +in some scenarios, such as reading large request bodies, +or large Websocket frames. During experiments it was +found that there is no best default value, even in a +single environment. Indeed the performance was highly +dependent on the size of the data we were receiving +for each packet. Cowboy 2.13 therefore comes with a +new `dynamic_buffer` mechanism that keeps track of the +data received and updates the `buffer` size dynamically +accordingly. The performance gains of this new approach +are enormous as you will see at the end of this article, +and have a positive impact on all protocols in most scenarios. +The technical details can be found in commit https://github.com/ninenines/cowboy/commit/49be0f57cf5ce66178dc24b9c08c835888d1ce0e[49be0f57cf5ce66178dc24b9c08c835888d1ce0e]. + +Finally, HTTP/1.1 and HTTP/2 connection processes can +now be set to `hibernate` automatically, which can +have a positive impact on performance in some scenarios +(such as receiving large HTTP/1.1 request bodies) even +if most scenarios will see a small drop in performance. +Cowboy 2.13 will not `hibernate` by default, but it +felt important to mention in this article: if your +service deals with GB-sized request bodies, it may help. + +Cumulatively, the optimisations improve the performance +of Cowboy 2.13, compared to Cowboy 2.12, in these terms: + +A single HTTP request uploading a 10GB file is handled +11x faster over HTTP, 8x faster over HTTPS and 7.5 faster +over HTTP/2. + +Ten thousand sequential HTTP requests each uploading a 1MB +file is handled 23x faster over HTTP, 6x faster over HTTPS +and 5x faster over HTTP/2. + +The same benchmark over 10 concurrent connections is +7x faster over HTTP, 1.7x faster over HTTPS and 3.5x +faster over HTTP/2. + +Performance of "hello world" type of benchmarks, where +the response is received before issuing a new request, +sees little impact from the changes in Cowboy 2.13. + +Performance of HTTP/2 over TCP connections, which is +typically not used in production, is dramatically +improved depending on the HTTP/2 options used. +Performance improvements of up to 57x faster processing +of 10GB request bodies have been observed. I suspect +there might be an underlying issue in Erlang/OTP that +leads to performance issues that only HTTP/2 over TCP +could see in Cowboy 2.12, and have opened a ticket. + +Websocket performance improvements vary depending on the +type of data: binary frames, text frames containing ASCII, +text frames containing mixed ASCII/UTF-8 and text frames +containing mostly UTF-8. They also vary depending on the +underlying protocol (HTTP/1.1 or HTTP/2). Again, comparing +Cowboy 2.13 to Cowboy 2.12: + +Binary text frames are processed 5x faster in both +Websocket over HTTP/1.1 and Websocket over HTTP/2. + +ASCII text frames are processed 4x to 6x faster in +Websocket over HTTP/1.1, depending on the scenario, +and 4x faster in Websocket over HTTP/2. + +Mixed text frames are processed 3x to 4.5x faster in +Websocket over HTTP/1.1, depending on the scenario, +and 3x faster in Websocket over HTTP/2. + +Mostly UTF-8 text frames are processed 3x faster in +Websocket over HTTP/1.1, depending on the scenario, +and 2.5x faster in Websocket over HTTP/2. + +When deflate compression is enabled, the performance +is roughly the same between Cowboy 2.12 and Cowboy 2.13. + +Most of the performance improvements are due to the +new `dynamic_buffer` option. Users that already set +a custom `buffer` value will not see as much improvement +in this release, since they already gained much from +tweaking `buffer`. Do note that the `dynamic_buffer` +option will not be enabled by default if `buffer` is +configured. + +Still, all other improvements should be beneficial +to all users, particularly the Websocket improvements. +I hope that you are looking forward to these changes! +I will now be preparing the Cowboy 2.13 release. + +You can donate to this project via +https://github.com/sponsors/essen[GitHub Sponsors]. + +As usual, feedback is appreciated, and issues or +questions should be sent via Github tickets or +discussions. We also have a new Discord server. +https://discord.gg/x25nNq2fFE[Join Erlang OSS Discord now!] diff --git a/articles/asciideck/index.html b/articles/asciideck/index.html index c8ae90a8..b451baa6 100644 --- a/articles/asciideck/index.html +++ b/articles/asciideck/index.html @@ -109,6 +109,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.0.0-pre.4/index.html b/articles/cowboy-2.0.0-pre.4/index.html index f5b9556b..deab275f 100644 --- a/articles/cowboy-2.0.0-pre.4/index.html +++ b/articles/cowboy-2.0.0-pre.4/index.html @@ -128,6 +128,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.0.0-rc.1/index.html b/articles/cowboy-2.0.0-rc.1/index.html index 2a297527..b99c25de 100644 --- a/articles/cowboy-2.0.0-rc.1/index.html +++ b/articles/cowboy-2.0.0-rc.1/index.html @@ -99,6 +99,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.0.0-rc.2/index.html b/articles/cowboy-2.0.0-rc.2/index.html index b9e8f6d9..413e6e2f 100644 --- a/articles/cowboy-2.0.0-rc.2/index.html +++ b/articles/cowboy-2.0.0-rc.2/index.html @@ -92,6 +92,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.0.0/index.html b/articles/cowboy-2.0.0/index.html index 30c8b5f0..7bdb7d07 100644 --- a/articles/cowboy-2.0.0/index.html +++ b/articles/cowboy-2.0.0/index.html @@ -98,6 +98,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.1.0/index.html b/articles/cowboy-2.1.0/index.html index 737198fe..2ee3f453 100644 --- a/articles/cowboy-2.1.0/index.html +++ b/articles/cowboy-2.1.0/index.html @@ -95,6 +95,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.11.0/index.html b/articles/cowboy-2.11.0/index.html index ab596a4e..defc7b21 100644 --- a/articles/cowboy-2.11.0/index.html +++ b/articles/cowboy-2.11.0/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.12.0/index.html b/articles/cowboy-2.12.0/index.html index 5611abe7..d7611efb 100644 --- a/articles/cowboy-2.12.0/index.html +++ b/articles/cowboy-2.12.0/index.html @@ -89,6 +89,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.13.0-performance/index.html b/articles/cowboy-2.13.0-performance/index.html new file mode 100644 index 00000000..1ae97553 --- /dev/null +++ b/articles/cowboy-2.13.0-performance/index.html @@ -0,0 +1,380 @@ +<!DOCTYPE html> +<html lang="en"> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta name="description" content=""> + <meta name="author" content="Loïc Hoguin based on a design from (Soft10) Pol Cámara"> + + <title>Nine Nines: Performance improvements in Cowboy 2.13</title> + + <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'> + <link href="/css/99s.css?r=7" rel="stylesheet"> + + <link rel="shortcut icon" href="/img/ico/favicon.ico"> + <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png"> + <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png"> + <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png"> + + </head> + + +<body class=""> + <header id="page-head"> + <div id="topbar" class="container"> + <div class="row"> + <div class="span2"> + <h1 id="logo"><a href="/" title="99s">99s</a></h1> + </div> + <div class="span10"> + + <div id="side-header"> + <nav> + <ul> + <li class="active"><a title="Hear my thoughts" href="/articles">Articles</a></li> + <li><a title="Watch my talks" href="/talks">Talks</a></li> + <li><a title="Read the docs" href="/docs">Documentation</a></li> + <li><a title="Request my services" href="/services">Consulting & Training</a></li> + </ul> + </nav> + <ul id="social"> + <li> + <a href="https://github.com/ninenines" title="Check my Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a> + </li> + <li> + <a title="Contact me" href="mailto:[email protected]"><img src="/img/ico_mail.png" data-hover="/img/ico_mail_alt.png"></a> + </li> + </ul> + </div> + </div> + </div> + </div> + + +</header> + +<div id="contents"> +<div class="container"> +<div class="row"> +<div class="span9 maincol"> + +<article class="blog_item"> +<header> + <h1 class="lined-header"><span>Performance improvements in Cowboy 2.13</span></h1> + <p class="date"> + <span class="year">2025</span> + <span class="day-month">13 Feb</span> + </p> +</header> + +<p>Cowboy <code>2.13.0</code> is close to being released. Much of the work done on this release focused on performance, and in particular the performance of the Websocket protocol.</p> +<p>The Websocket protocol requires clients to mask the data they send, originally to avoid issues with proxies. This requirement is still present for Websocket over HTTP/2 nevertheless. This means that the server has to unmask the data, which has a notable impact on performance. Cowboy 2.13 will attempt to unmask 16 bytes at a time instead of 4 previously, leading to a rouhgly 10% faster processing of Websocket frames.</p> +<p>Similarly, the Websocket protocol requires validating that the data in text frames is valid UTF-8. This part of the Websocket code was always highly optimised, but changes in the VM made the optimisations less impactful. The validation code was therefore rewritten, inspired by the validation code in Erlang/OTP's new <code>json</code> module (itself inspired by the validation in Cowboy!) and Cowboy 2.13 is now 10% to 15% faster processing Websocket text frames.</p> +<p>Cowboy must keep track of the data coming in to detect whether the client is still around, or gone. It does so via a timeout that is reset when data is received. Since it may receive a lot of data, there may be a lot of timer resets, impacting performance. Cowboy 2.13 will instead run a timer periodically with a timeout that is a tenth of <code>idle_timeout</code>, and count how many times in a row that timeout was triggered without receiving data. This greatly reduces the number of times we set or reset the timer and makes some Websocket scenarios 10% faster.</p> +<p>These timer improvements were also brought to HTTP/2.</p> +<p>Cowboy by default will not configure transport options, because they are highly dependent on environment, so anyone looking to get the best performance out of Cowboy has to figure out the best values. One of these values is the <code>buffer</code> option, which represents the size of the socket's buffer on OTP's side. Its default is very low (1460 bytes) and so performance is highly degraded in some scenarios, such as reading large request bodies, or large Websocket frames. During experiments it was found that there is no best default value, even in a single environment. Indeed the performance was highly dependent on the size of the data we were receiving for each packet. Cowboy 2.13 therefore comes with a new <code>dynamic_buffer</code> mechanism that keeps track of the data received and updates the <code>buffer</code> size dynamically accordingly. The performance gains of this new approach are enormous as you will see at the end of this article, and have a positive impact on all protocols in most scenarios. The technical details can be found in commit <a href="https://github.com/ninenines/cowboy/commit/49be0f57cf5ce66178dc24b9c08c835888d1ce0e">49be0f57cf5ce66178dc24b9c08c835888d1ce0e</a>.</p> +<p>Finally, HTTP/1.1 and HTTP/2 connection processes can now be set to <code>hibernate</code> automatically, which can have a positive impact on performance in some scenarios (such as receiving large HTTP/1.1 request bodies) even if most scenarios will see a small drop in performance. Cowboy 2.13 will not <code>hibernate</code> by default, but it felt important to mention in this article: if your service deals with GB-sized request bodies, it may help.</p> +<p>Cumulatively, the optimisations improve the performance of Cowboy 2.13, compared to Cowboy 2.12, in these terms:</p> +<p>A single HTTP request uploading a 10GB file is handled 11x faster over HTTP, 8x faster over HTTPS and 7.5 faster over HTTP/2.</p> +<p>Ten thousand sequential HTTP requests each uploading a 1MB file is handled 23x faster over HTTP, 6x faster over HTTPS and 5x faster over HTTP/2.</p> +<p>The same benchmark over 10 concurrent connections is 7x faster over HTTP, 1.7x faster over HTTPS and 3.5x faster over HTTP/2.</p> +<p>Performance of "hello world" type of benchmarks, where the response is received before issuing a new request, sees little impact from the changes in Cowboy 2.13.</p> +<p>Performance of HTTP/2 over TCP connections, which is typically not used in production, is dramatically improved depending on the HTTP/2 options used. Performance improvements of up to 57x faster processing of 10GB request bodies have been observed. I suspect there might be an underlying issue in Erlang/OTP that leads to performance issues that only HTTP/2 over TCP could see in Cowboy 2.12, and have opened a ticket.</p> +<p>Websocket performance improvements vary depending on the type of data: binary frames, text frames containing ASCII, text frames containing mixed ASCII/UTF-8 and text frames containing mostly UTF-8. They also vary depending on the underlying protocol (HTTP/1.1 or HTTP/2). Again, comparing Cowboy 2.13 to Cowboy 2.12:</p> +<p>Binary text frames are processed 5x faster in both Websocket over HTTP/1.1 and Websocket over HTTP/2.</p> +<p>ASCII text frames are processed 4x to 6x faster in Websocket over HTTP/1.1, depending on the scenario, and 4x faster in Websocket over HTTP/2.</p> +<p>Mixed text frames are processed 3x to 4.5x faster in Websocket over HTTP/1.1, depending on the scenario, and 3x faster in Websocket over HTTP/2.</p> +<p>Mostly UTF-8 text frames are processed 3x faster in Websocket over HTTP/1.1, depending on the scenario, and 2.5x faster in Websocket over HTTP/2.</p> +<p>When deflate compression is enabled, the performance is roughly the same between Cowboy 2.12 and Cowboy 2.13.</p> +<p>Most of the performance improvements are due to the new <code>dynamic_buffer</code> option. Users that already set a custom <code>buffer</code> value will not see as much improvement in this release, since they already gained much from tweaking <code>buffer</code>. Do note that the <code>dynamic_buffer</code> option will not be enabled by default if <code>buffer</code> is configured.</p> +<p>Still, all other improvements should be beneficial to all users, particularly the Websocket improvements. I hope that you are looking forward to these changes! I will now be preparing the Cowboy 2.13 release.</p> +<p>You can donate to this project via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a>.</p> +<p>As usual, feedback is appreciated, and issues or questions should be sent via Github tickets or discussions. We also have a new Discord server. <a href="https://discord.gg/x25nNq2fFE">Join Erlang OSS Discord now!</a></p> + + +</article> +</div> + +<div class="span3 sidecol"> +<h3>More articles</h3> +<ul id="articles-nav" class="extra_margin"> + + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.12.0/">Cowboy 2.12</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.11.0/">Cowboy 2.11</a></li> + + + + <li><a href="https://ninenines.eu/articles/otp-26/">Erlang/OTP 26</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0/">Gun 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.1.0/">Ranch 2.1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.9.0/">Cowboy 2.9</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-rc.1/">Gun 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.0.0/">Ranch 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.8.0/">Cowboy 2.8</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-gateway-trilogy/">The Gateway Trilogy</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.2/">Gun 2.0 pre-release 2</a></li> + + + + <li><a href="https://ninenines.eu/articles/merry-christmas-2019/">Merry Christmas 2019: New Beginnings</a></li> + + + + <li><a href="https://ninenines.eu/articles/github-sponsors/">GitHub Sponsors</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.7.0/">Cowboy 2.7</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-2.0.0-pre.1/">Gun 2.0 pre-release 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-meetup-10-septembre-2019/">Erlang meetup: 10 septembre 2019</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-2.0.0-rc.1/">Ranch 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/joe_the_rubber_duck/">Joe Armstrong the rubber duck</a></li> + + + + <li><a href="https://ninenines.eu/articles/merry-christmas-2018/">Merry Christmas 2018: A Recap</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.6.0/">Cowboy 2.6</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.7.0/">Ranch 1.7</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.5.0/">Cowboy 2.5</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.3.0/">Gun 1.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.2.0/">Gun 1.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.6.0/">Ranch 1.6</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.0.0/">Gun 1.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/asciideck/">Asciideck: Asciidoc for Erlang</a></li> + + + + <li><a href="https://ninenines.eu/articles/gun-1.0.0-rc.1/">Gun 1.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.4.0/">Cowboy 2.4</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.3.0/">Cowboy 2.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.2.0/">Cowboy 2.2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.1.0/">Cowboy 2.1</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0/">Cowboy 2.0</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.2/">Cowboy 2.0 release candidate 2</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-rc.1/">Cowboy 2.0 release candidate 1</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-elephant-in-the-room/">The elephant in the room</a></li> + + + + <li><a href="https://ninenines.eu/articles/dont-let-it-crash/">Don't let it crash</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy-2.0.0-pre.4/">Cowboy 2.0 pre-release 4</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></li> + + + + <li><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></li> + + + + <li><a href="https://ninenines.eu/articles/website-update/">Website update</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlanger-playbook-september-2015-update/">The Erlanger Playbook September 2015 Update</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlanger-playbook/">The Erlanger Playbook</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-validate-utf8/">Validating UTF-8 binaries with Erlang</a></li> + + + + <li><a href="https://ninenines.eu/articles/on-open-source/">On open source</a></li> + + + + <li><a href="https://ninenines.eu/articles/the-story-so-far/">The story so far</a></li> + + + + <li><a href="https://ninenines.eu/articles/cowboy2-qs/">Cowboy 2.0 and query strings</a></li> + + + + <li><a href="https://ninenines.eu/articles/january-2014-status/">January 2014 status</a></li> + + + + <li><a href="https://ninenines.eu/articles/farwest-funded/">Farwest got funded!</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang.mk-and-relx/">Build Erlang releases with Erlang.mk and Relx</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.5-intermediate-module/">Xerl: intermediate module</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.4-expression-separator/">Xerl: expression separator</a></li> + + + + <li><a href="https://ninenines.eu/articles/erlang-scalability/">Erlang Scalability</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.3-atomic-expressions/">Xerl: atomic expressions</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.2-two-modules/">Xerl: two modules</a></li> + + + + <li><a href="https://ninenines.eu/articles/xerl-0.1-empty-modules/">Xerl: empty modules</a></li> + + + + <li><a href="https://ninenines.eu/articles/ranch-ftp/">Build an FTP Server with Ranch in 30 Minutes</a></li> + + + + <li><a href="https://ninenines.eu/articles/tictactoe/">Erlang Tic Tac Toe</a></li> + + +</ul> + +<h3>Feedback</h3> +<p>Feel free to <a href="mailto:[email protected]">email us</a> +if you found any mistake or need clarification on any of the +articles.</p> + +</div> +</div> +</div> +</div> + + <footer> + <div class="container"> + <div class="row"> + <div class="span6"> + <p id="scroll-top"><a href="#">↑ Scroll to top</a></p> + <nav> + <ul> + <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li> + </ul> + </nav> + </div> + <div class="span6 credits"> + <p><img src="/img/footer_logo.png"></p> + <p>Copyright © Loïc Hoguin 2012-2018</p> + </div> + </div> + </div> + </footer> + + + <script src="/js/custom.js"></script> + </body> +</html> + diff --git a/articles/cowboy-2.2.0/index.html b/articles/cowboy-2.2.0/index.html index 854c322a..41879ff1 100644 --- a/articles/cowboy-2.2.0/index.html +++ b/articles/cowboy-2.2.0/index.html @@ -93,6 +93,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.3.0/index.html b/articles/cowboy-2.3.0/index.html index aee663be..b2e71a14 100644 --- a/articles/cowboy-2.3.0/index.html +++ b/articles/cowboy-2.3.0/index.html @@ -85,6 +85,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.4.0/index.html b/articles/cowboy-2.4.0/index.html index 6131955e..934ff59c 100644 --- a/articles/cowboy-2.4.0/index.html +++ b/articles/cowboy-2.4.0/index.html @@ -87,6 +87,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.5.0/index.html b/articles/cowboy-2.5.0/index.html index c18eb3ec..0fa6f0f7 100644 --- a/articles/cowboy-2.5.0/index.html +++ b/articles/cowboy-2.5.0/index.html @@ -91,6 +91,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.6.0/index.html b/articles/cowboy-2.6.0/index.html index e7136690..c1662a44 100644 --- a/articles/cowboy-2.6.0/index.html +++ b/articles/cowboy-2.6.0/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.7.0/index.html b/articles/cowboy-2.7.0/index.html index d420bc79..6a0ab127 100644 --- a/articles/cowboy-2.7.0/index.html +++ b/articles/cowboy-2.7.0/index.html @@ -89,6 +89,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.8.0/index.html b/articles/cowboy-2.8.0/index.html index 02e9fe1d..3530045d 100644 --- a/articles/cowboy-2.8.0/index.html +++ b/articles/cowboy-2.8.0/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy-2.9.0/index.html b/articles/cowboy-2.9.0/index.html index 48bb0bef..6da1c856 100644 --- a/articles/cowboy-2.9.0/index.html +++ b/articles/cowboy-2.9.0/index.html @@ -87,6 +87,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/cowboy2-qs/index.html b/articles/cowboy2-qs/index.html index 97f772f5..1c0443a5 100644 --- a/articles/cowboy2-qs/index.html +++ b/articles/cowboy2-qs/index.html @@ -129,6 +129,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/discord-server/index.html b/articles/discord-server/index.html index c5850178..950d8e07 100644 --- a/articles/discord-server/index.html +++ b/articles/discord-server/index.html @@ -85,6 +85,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/dont-let-it-crash/index.html b/articles/dont-let-it-crash/index.html index ddc4eaa2..96e29f25 100644 --- a/articles/dont-let-it-crash/index.html +++ b/articles/dont-let-it-crash/index.html @@ -104,6 +104,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/erlang-meetup-10-septembre-2019/index.html b/articles/erlang-meetup-10-septembre-2019/index.html index b561abc1..109b47a8 100644 --- a/articles/erlang-meetup-10-septembre-2019/index.html +++ b/articles/erlang-meetup-10-septembre-2019/index.html @@ -84,6 +84,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/erlang-scalability/index.html b/articles/erlang-scalability/index.html index c10ab4ce..8b00787e 100644 --- a/articles/erlang-scalability/index.html +++ b/articles/erlang-scalability/index.html @@ -116,6 +116,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/erlang-validate-utf8/index.html b/articles/erlang-validate-utf8/index.html index 14ed8a44..1d7c7f9c 100644 --- a/articles/erlang-validate-utf8/index.html +++ b/articles/erlang-validate-utf8/index.html @@ -232,6 +232,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/erlang.mk-and-relx/index.html b/articles/erlang.mk-and-relx/index.html index c2479975..db8b348c 100644 --- a/articles/erlang.mk-and-relx/index.html +++ b/articles/erlang.mk-and-relx/index.html @@ -118,6 +118,10 @@ cowboy-0.8.5 erlydtl-0.7.0 ninenines-0.2.0 stdlib-1.19.1</pre></div></div> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/erlanger-playbook-september-2015-update/index.html b/articles/erlanger-playbook-september-2015-update/index.html index 4297e095..a5ed4d1a 100644 --- a/articles/erlanger-playbook-september-2015-update/index.html +++ b/articles/erlanger-playbook-september-2015-update/index.html @@ -87,6 +87,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/erlanger-playbook/index.html b/articles/erlanger-playbook/index.html index 243aa0ca..91a69925 100644 --- a/articles/erlanger-playbook/index.html +++ b/articles/erlanger-playbook/index.html @@ -128,6 +128,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/farwest-funded/index.html b/articles/farwest-funded/index.html index f90dcd24..bd4a6a48 100644 --- a/articles/farwest-funded/index.html +++ b/articles/farwest-funded/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/github-sponsors/index.html b/articles/github-sponsors/index.html index 392956db..ff525315 100644 --- a/articles/github-sponsors/index.html +++ b/articles/github-sponsors/index.html @@ -85,6 +85,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-1.0.0-rc.1/index.html b/articles/gun-1.0.0-rc.1/index.html index 8eee772a..cefd36c9 100644 --- a/articles/gun-1.0.0-rc.1/index.html +++ b/articles/gun-1.0.0-rc.1/index.html @@ -89,6 +89,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-1.0.0/index.html b/articles/gun-1.0.0/index.html index 78b28f30..6ee28651 100644 --- a/articles/gun-1.0.0/index.html +++ b/articles/gun-1.0.0/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-1.2.0/index.html b/articles/gun-1.2.0/index.html index 6e07638e..785b5478 100644 --- a/articles/gun-1.2.0/index.html +++ b/articles/gun-1.2.0/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-1.3.0/index.html b/articles/gun-1.3.0/index.html index 378c285f..1f00de7a 100644 --- a/articles/gun-1.3.0/index.html +++ b/articles/gun-1.3.0/index.html @@ -86,6 +86,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-2.0.0-pre.1/index.html b/articles/gun-2.0.0-pre.1/index.html index 54ccfd2d..71b24674 100644 --- a/articles/gun-2.0.0-pre.1/index.html +++ b/articles/gun-2.0.0-pre.1/index.html @@ -93,6 +93,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-2.0.0-pre.2/index.html b/articles/gun-2.0.0-pre.2/index.html index d27a885a..080c560d 100644 --- a/articles/gun-2.0.0-pre.2/index.html +++ b/articles/gun-2.0.0-pre.2/index.html @@ -91,6 +91,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-2.0.0-rc.1/index.html b/articles/gun-2.0.0-rc.1/index.html index f4d51a99..e8aadd63 100644 --- a/articles/gun-2.0.0-rc.1/index.html +++ b/articles/gun-2.0.0-rc.1/index.html @@ -96,6 +96,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/gun-2.0.0/index.html b/articles/gun-2.0.0/index.html index bbdac4cb..5ed62f28 100644 --- a/articles/gun-2.0.0/index.html +++ b/articles/gun-2.0.0/index.html @@ -98,6 +98,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/index.html b/articles/index.html index aa4f6e3c..850e7e7e 100644 --- a/articles/index.html +++ b/articles/index.html @@ -65,6 +65,23 @@ <article class="blog_item"> <header> + <h2><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></h2> + <p class="date"> + <span class="year">2025</span> + <span class="day-month">13 Feb</span> + </p> + </header> + + <p>Cowboy 2.13.0 is close to being released. Much of the work done on this release focused on performance, and in particular the performance of the Websocket protocol. +The Websocket protocol requires clients to mask the data they send, originally to avoid issues with proxies. This requirement is still present for Websocket over HTTP/2 nevertheless. This means that the server has to unmask the data, which has a notable impact on performance.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> <h2><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></h2> <p class="date"> <span class="year">2024</span> @@ -408,24 +425,6 @@ My most striking memory of Joe was during dinner at his place after a conference </p> </article> - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/merry-christmas-2018/">Merry Christmas 2018: A Recap</a></h2> - <p class="date"> - <span class="year">2018</span> - <span class="day-month">25 Dec</span> - </p> - </header> - - <p>As the year 2018 ends it's time for a short recap and a look forward for the next year. -Overall, more than half of all open tickets have been closed. Most tickets were opened since 2015 and I couldn't get to those, but now that pre-school started I have a lot more time! I'm aiming to keep the number of tickets below 100 across all my projects. -Cowboy 2.x is now mature.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/merry-christmas-2018/">Read More</a> - </p> - </article> - <nav class="pagination" role="pagination"> diff --git a/articles/index.xml b/articles/index.xml index e90bf82c..2d451636 100644 --- a/articles/index.xml +++ b/articles/index.xml @@ -6,12 +6,22 @@ <description>Recent content in Articles on Nine Nines</description> <generator>Hugo -- gohugo.io</generator> <language>en-us</language> - <lastBuildDate>Mon, 18 Nov 2024 07:00:00 +0100</lastBuildDate> + <lastBuildDate>Thu, 13 Feb 2025 07:00:00 +0100</lastBuildDate> <atom:link href="https://ninenines.eu/articles/index.xml" rel="self" type="application/rss+xml" /> <item> + <title>Performance improvements in Cowboy 2.13</title> + <link>https://ninenines.eu/articles/cowboy-2.13.0-performance/</link> + <pubDate>Thu, 13 Feb 2025 07:00:00 +0100</pubDate> + + <guid>https://ninenines.eu/articles/cowboy-2.13.0-performance/</guid> + <description>Cowboy 2.13.0 is close to being released. Much of the work done on this release focused on performance, and in particular the performance of the Websocket protocol. +The Websocket protocol requires clients to mask the data they send, originally to avoid issues with proxies. This requirement is still present for Websocket over HTTP/2 nevertheless. This means that the server has to unmask the data, which has a notable impact on performance.</description> + </item> + + <item> <title>Erlang OSS Discord server</title> <link>https://ninenines.eu/articles/discord-server/</link> <pubDate>Mon, 18 Nov 2024 07:00:00 +0100</pubDate> diff --git a/articles/january-2014-status/index.html b/articles/january-2014-status/index.html index a99bbc11..f64228c3 100644 --- a/articles/january-2014-status/index.html +++ b/articles/january-2014-status/index.html @@ -114,6 +114,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/joe_the_rubber_duck/index.html b/articles/joe_the_rubber_duck/index.html index 689319f8..4e9ef2a0 100644 --- a/articles/joe_the_rubber_duck/index.html +++ b/articles/joe_the_rubber_duck/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/merry-christmas-2018/index.html b/articles/merry-christmas-2018/index.html index 3cef8647..5f2843c3 100644 --- a/articles/merry-christmas-2018/index.html +++ b/articles/merry-christmas-2018/index.html @@ -95,6 +95,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/merry-christmas-2019/index.html b/articles/merry-christmas-2019/index.html index 67f6d49b..16f4e6ad 100644 --- a/articles/merry-christmas-2019/index.html +++ b/articles/merry-christmas-2019/index.html @@ -91,6 +91,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/ml-archives/index.html b/articles/ml-archives/index.html index 4da4dda8..93b24cc8 100644 --- a/articles/ml-archives/index.html +++ b/articles/ml-archives/index.html @@ -85,6 +85,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/on-open-source/index.html b/articles/on-open-source/index.html index 9c879dfd..fb9a3162 100644 --- a/articles/on-open-source/index.html +++ b/articles/on-open-source/index.html @@ -97,6 +97,10 @@ much left to look at today</a>. This was followed by a <a href="https://github.c + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/otp-26/index.html b/articles/otp-26/index.html index c6a82427..11502b14 100644 --- a/articles/otp-26/index.html +++ b/articles/otp-26/index.html @@ -92,6 +92,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/page/2/index.html b/articles/page/2/index.html index b5c22216..f234f775 100644 --- a/articles/page/2/index.html +++ b/articles/page/2/index.html @@ -65,6 +65,24 @@ <article class="blog_item"> <header> + <h2><a href="https://ninenines.eu/articles/merry-christmas-2018/">Merry Christmas 2018: A Recap</a></h2> + <p class="date"> + <span class="year">2018</span> + <span class="day-month">25 Dec</span> + </p> + </header> + + <p>As the year 2018 ends it's time for a short recap and a look forward for the next year. +Overall, more than half of all open tickets have been closed. Most tickets were opened since 2015 and I couldn't get to those, but now that pre-school started I have a lot more time! I'm aiming to keep the number of tickets below 100 across all my projects. +Cowboy 2.x is now mature.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/merry-christmas-2018/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> <h2><a href="https://ninenines.eu/articles/cowboy-2.6.0/">Cowboy 2.6</a></h2> <p class="date"> <span class="year">2018</span> @@ -416,25 +434,6 @@ A new architecture: there now is one process per connection and one process per </p> </article> - <article class="blog_item"> - <header> - <h2><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></h2> - <p class="date"> - <span class="year">2016</span> - <span class="day-month">28 Nov</span> - </p> - </header> - - <p>Ranch 1.3.0 has been released! -This release fixes a number of long standing issues and adds a small number of features: -The ssl application has been added to the list of dependencies. If you don't need it, you can remove it automatically when fetching Ranch or when building the release. If you do need it, you will no longer have issues shutting down a node because of Ranch. -The ranch:info/0 and ranch:procs/2 can be used to retrieve information about Ranch's state.</p> - - <p style="text-align:right"> - <a class="read_more" href="https://ninenines.eu/articles/ranch-1.3/">Read More</a> - </p> - </article> - <nav class="pagination" role="pagination"> diff --git a/articles/page/3/index.html b/articles/page/3/index.html index c189e0a9..99fbac21 100644 --- a/articles/page/3/index.html +++ b/articles/page/3/index.html @@ -65,6 +65,25 @@ <article class="blog_item"> <header> + <h2><a href="https://ninenines.eu/articles/ranch-1.3/">Ranch 1.3</a></h2> + <p class="date"> + <span class="year">2016</span> + <span class="day-month">28 Nov</span> + </p> + </header> + + <p>Ranch 1.3.0 has been released! +This release fixes a number of long standing issues and adds a small number of features: +The ssl application has been added to the list of dependencies. If you don't need it, you can remove it automatically when fetching Ranch or when building the release. If you do need it, you will no longer have issues shutting down a node because of Ranch. +The ranch:info/0 and ranch:procs/2 can be used to retrieve information about Ranch's state.</p> + + <p style="text-align:right"> + <a class="read_more" href="https://ninenines.eu/articles/ranch-1.3/">Read More</a> + </p> + </article> + + <article class="blog_item"> + <header> <h2><a href="https://ninenines.eu/articles/ml-archives/">Mailing list archived</a></h2> <p class="date"> <span class="year">2016</span> diff --git a/articles/ranch-1.3/index.html b/articles/ranch-1.3/index.html index 3cae88c5..d0fdcda7 100644 --- a/articles/ranch-1.3/index.html +++ b/articles/ranch-1.3/index.html @@ -126,6 +126,10 @@ Primary key fingerprint<font color="#990000">:</font> F19F 189C ECC7 <font color + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/ranch-1.6.0/index.html b/articles/ranch-1.6.0/index.html index e71c75fa..79a85ff0 100644 --- a/articles/ranch-1.6.0/index.html +++ b/articles/ranch-1.6.0/index.html @@ -88,6 +88,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/ranch-1.7.0/index.html b/articles/ranch-1.7.0/index.html index 31f50a87..11dccacb 100644 --- a/articles/ranch-1.7.0/index.html +++ b/articles/ranch-1.7.0/index.html @@ -87,6 +87,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/ranch-2.0.0-rc.1/index.html b/articles/ranch-2.0.0-rc.1/index.html index 32837d38..3f898c6a 100644 --- a/articles/ranch-2.0.0-rc.1/index.html +++ b/articles/ranch-2.0.0-rc.1/index.html @@ -96,6 +96,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/ranch-2.0.0/index.html b/articles/ranch-2.0.0/index.html index b954ffc3..a5a9957a 100644 --- a/articles/ranch-2.0.0/index.html +++ b/articles/ranch-2.0.0/index.html @@ -95,6 +95,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/ranch-2.1.0/index.html b/articles/ranch-2.1.0/index.html index a114cbf6..b4b141f1 100644 --- a/articles/ranch-2.1.0/index.html +++ b/articles/ranch-2.1.0/index.html @@ -90,6 +90,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/ranch-ftp/index.html b/articles/ranch-ftp/index.html index 58414204..2ba44ce6 100644 --- a/articles/ranch-ftp/index.html +++ b/articles/ranch-ftp/index.html @@ -228,6 +228,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/the-elephant-in-the-room/index.html b/articles/the-elephant-in-the-room/index.html index 7bc52b9e..cee462f3 100644 --- a/articles/the-elephant-in-the-room/index.html +++ b/articles/the-elephant-in-the-room/index.html @@ -110,6 +110,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/the-gateway-trilogy/index.html b/articles/the-gateway-trilogy/index.html index 4c1e5752..c8624105 100644 --- a/articles/the-gateway-trilogy/index.html +++ b/articles/the-gateway-trilogy/index.html @@ -85,6 +85,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/the-story-so-far/index.html b/articles/the-story-so-far/index.html index c0c72ebb..6f4ed947 100644 --- a/articles/the-story-so-far/index.html +++ b/articles/the-story-so-far/index.html @@ -101,6 +101,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/tictactoe/index.html b/articles/tictactoe/index.html index beedac07..4601bede 100644 --- a/articles/tictactoe/index.html +++ b/articles/tictactoe/index.html @@ -133,6 +133,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/website-update/index.html b/articles/website-update/index.html index 9287ace0..ff7c03a7 100644 --- a/articles/website-update/index.html +++ b/articles/website-update/index.html @@ -90,6 +90,10 @@ + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/xerl-0.1-empty-modules/index.html b/articles/xerl-0.1-empty-modules/index.html index 7cf3102c..ea85e74f 100644 --- a/articles/xerl-0.1-empty-modules/index.html +++ b/articles/xerl-0.1-empty-modules/index.html @@ -168,6 +168,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/xerl-0.2-two-modules/index.html b/articles/xerl-0.2-two-modules/index.html index 00ce3304..ffb175fc 100644 --- a/articles/xerl-0.2-two-modules/index.html +++ b/articles/xerl-0.2-two-modules/index.html @@ -196,6 +196,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/xerl-0.3-atomic-expressions/index.html b/articles/xerl-0.3-atomic-expressions/index.html index 5cd69229..aace71e5 100644 --- a/articles/xerl-0.3-atomic-expressions/index.html +++ b/articles/xerl-0.3-atomic-expressions/index.html @@ -165,6 +165,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/xerl-0.4-expression-separator/index.html b/articles/xerl-0.4-expression-separator/index.html index 6086410b..a75f7cc5 100644 --- a/articles/xerl-0.4-expression-separator/index.html +++ b/articles/xerl-0.4-expression-separator/index.html @@ -117,6 +117,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/articles/xerl-0.5-intermediate-module/index.html b/articles/xerl-0.5-intermediate-module/index.html index 19a76f64..46f7ca03 100644 --- a/articles/xerl-0.5-intermediate-module/index.html +++ b/articles/xerl-0.5-intermediate-module/index.html @@ -161,6 +161,10 @@ http://www.gnu.org/software/src-highlite --> + <li><a href="https://ninenines.eu/articles/cowboy-2.13.0-performance/">Performance improvements in Cowboy 2.13</a></li> + + + <li><a href="https://ninenines.eu/articles/discord-server/">Erlang OSS Discord server</a></li> diff --git a/donate/index.html b/donate/index.html index 7ab32fc4..656041cb 100644 --- a/donate/index.html +++ b/donate/index.html @@ -919,6 +919,8 @@ + + <h3 id="_like_my_work__donate">Like my work? Donate!</h3> <p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p> <form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline"> diff --git a/erlanger-playbook/index.html b/erlanger-playbook/index.html index 0c263812..b7e3e829 100644 --- a/erlanger-playbook/index.html +++ b/erlanger-playbook/index.html @@ -959,6 +959,8 @@ + + <h3 id="_like_my_work__donate">Like my work? Donate!</h3> <p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p> <form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline"> @@ -1059,6 +1059,8 @@ + + <p>Reward my work via <a href="https://github.com/sponsors/essen">GitHub Sponsors</a> and<br/>GitHub will double the funds I receive!</p> @@ -4057,6 +4057,16 @@ HTTP IANA Registries HTTP Method Registry HTTP Status Code Registry Message He </item> <item> + <title>Performance improvements in Cowboy 2.13</title> + <link>https://ninenines.eu/articles/cowboy-2.13.0-performance/</link> + <pubDate>Thu, 13 Feb 2025 07:00:00 +0100</pubDate> + + <guid>https://ninenines.eu/articles/cowboy-2.13.0-performance/</guid> + <description>Cowboy 2.13.0 is close to being released. Much of the work done on this release focused on performance, and in particular the performance of the Websocket protocol. +The Websocket protocol requires clients to mask the data they send, originally to avoid issues with proxies. This requirement is still present for Websocket over HTTP/2 nevertheless. This means that the server has to unmask the data, which has a notable impact on performance.</description> + </item> + + <item> <title>Erlang OSS Discord server</title> <link>https://ninenines.eu/articles/discord-server/</link> <pubDate>Mon, 18 Nov 2024 07:00:00 +0100</pubDate> diff --git a/services/index.html b/services/index.html index 63e4c066..da847f4e 100644 --- a/services/index.html +++ b/services/index.html @@ -945,6 +945,8 @@ + + <h3 id="_like_my_work__donate">Like my work? Donate!</h3> <p>Donate to Loïc Hoguin because his work on Cowboy, Ranch, Gun and Erlang.mk is fantastic:</p> <form action="https://www.paypal.com/cgi-bin/webscr" method="post" style="display:inline"> diff --git a/sitemap.xml b/sitemap.xml index 75ff92d2..e462fbf6 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1488,7 +1488,12 @@ <url> <loc>https://ninenines.eu/articles/</loc> - <lastmod>2024-11-18T07:00:00+01:00</lastmod> + <lastmod>2025-02-13T07:00:00+01:00</lastmod> + </url> + + <url> + <loc>https://ninenines.eu/articles/cowboy-2.13.0-performance/</loc> + <lastmod>2025-02-13T07:00:00+01:00</lastmod> </url> <url> |