<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cowboy.git/Makefile, branch improve-dynamic_buffer</title>
<subtitle>Small, fast, modern HTTP server for Erlang/OTP.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/'/>
<entry>
<title>Depend on Cowlib master for WebTransport support</title>
<updated>2025-06-20T11:37:10+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-06-20T11:37:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=5ec0eeb4d43b83f5cfbc20081644116e44f9eaad'/>
<id>5ec0eeb4d43b83f5cfbc20081644116e44f9eaad</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Initial WebTransport implementation</title>
<updated>2025-06-19T14:27:07+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-05-12T11:01:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=58909b014446462370d6280ffe93c6f4fbe116da'/>
<id>58909b014446462370d6280ffe93c6f4fbe116da</id>
<content type='text'>
This implements the upcoming draft-13
but has bits to make it work with draft-02
that most (all?) Chromium versions use.

Data and events are not going through
cowboy_stream beyond init. Since this
approach appears to work well it may
be a good idea to do the same for
Websocket over HTTP/2+ and improve
its performance.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This implements the upcoming draft-13
but has bits to make it work with draft-02
that most (all?) Chromium versions use.

Data and events are not going through
cowboy_stream beyond init. Since this
approach appears to work well it may
be a good idea to do the same for
Websocket over HTTP/2+ and improve
its performance.
</pre>
</div>
</content>
</entry>
<entry>
<title>Relax Cowlib version requirement for Hex</title>
<updated>2025-02-17T13:47:32+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-02-17T13:47:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=d6dda1fee4cde84a44e11a3afd252417a5f6af79'/>
<id>d6dda1fee4cde84a44e11a3afd252417a5f6af79</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Cowboy 2.13.0</title>
<updated>2025-02-17T13:46:20+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-02-17T13:46:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=9facbfd121f4298d0269e01c8bd9d8d42c639d29'/>
<id>9facbfd121f4298d0269e01c8bd9d8d42c639d29</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use explicit Ranch and Cowlib versions</title>
<updated>2025-02-17T11:57:00+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-02-17T11:57:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=9430bf99ea2cc9c2c3ee06321c77433abb521833'/>
<id>9430bf99ea2cc9c2c3ee06321c77433abb521833</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Relax Ranch version requirement for Hex</title>
<updated>2025-02-11T15:02:10+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-02-11T15:02:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=761c1f8dca936cd529dbada0b85cd2280ee7dca4'/>
<id>761c1f8dca936cd529dbada0b85cd2280ee7dca4</id>
<content type='text'>
It is now specified as &gt;= 1.8.0 and &lt; 3.0.0 since Cowboy
supports both Ranch 1.8.x and 2.x.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It is now specified as &gt;= 1.8.0 and &lt; 3.0.0 since Cowboy
supports both Ranch 1.8.x and 2.x.
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't run perf suites by default</title>
<updated>2025-02-05T13:30:25+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-02-05T12:28:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=d889291c4f2823d4af738743af4598f1ac947617'/>
<id>d889291c4f2823d4af738743af4598f1ac947617</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Avoid resetting Websocket idle_timeout timer too often</title>
<updated>2025-01-15T12:31:19+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-01-08T12:23:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=086f60cca45b2ebc1a8181545d64461436791dcc'/>
<id>086f60cca45b2ebc1a8181545d64461436791dcc</id>
<content type='text'>
`perf` has shown that Cowboy spends a lot of time
cancelling and starting this timer. Instead of resetting
for every data received, we now only reset a field in the
state.

Before it was working like this:

- start idle timeout timer
- on trigger, close the connection
- on data, cancel and start again

Now it's working like this:

- start idle timeout timer for a tenth of its duration, with tick number = 0
- on trigger, if tick number != 10
  - start the timer again, again for a tenth of its duration
  - increment tick number
- on trigger, if tick number = 10
  - close the connection
- on data, set tick number to 0
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
`perf` has shown that Cowboy spends a lot of time
cancelling and starting this timer. Instead of resetting
for every data received, we now only reset a field in the
state.

Before it was working like this:

- start idle timeout timer
- on trigger, close the connection
- on data, cancel and start again

Now it's working like this:

- start idle timeout timer for a tenth of its duration, with tick number = 0
- on trigger, if tick number != 10
  - start the timer again, again for a tenth of its duration
  - increment tick number
- on trigger, if tick number = 10
  - close the connection
- on data, set tick number to 0
</pre>
</div>
</content>
</entry>
<entry>
<title>Add ws_perf_SUITE to measure Websocket performance</title>
<updated>2025-01-15T12:28:57+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2024-12-19T14:26:44+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=643b335ba85e018a14c62cbac94306a371b62d34'/>
<id>643b335ba85e018a14c62cbac94306a371b62d34</id>
<content type='text'>
It benchmarks binary, ascii, mixed and japanese data
using Websocket and Websocket over HTTP/2.

HTTP/2 options get set to ensure that performance is
better than the default HTTP/2 options.

It switches to Gun and Ranch branches that include
fixes that are required for tests to complete successfully.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It benchmarks binary, ascii, mixed and japanese data
using Websocket and Websocket over HTTP/2.

HTTP/2 options get set to ensure that performance is
better than the default HTTP/2 options.

It switches to Gun and Ranch branches that include
fixes that are required for tests to complete successfully.
</pre>
</div>
</content>
</entry>
<entry>
<title>Initial HTTP/3 implementation</title>
<updated>2024-03-26T14:53:48+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2023-01-31T10:07:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=8cb9d242b0a665cada6de8b9a9dfa329e0c06ee9'/>
<id>8cb9d242b0a665cada6de8b9a9dfa329e0c06ee9</id>
<content type='text'>
This includes Websocket over HTTP/3.

Since quicer, which provides the QUIC implementation,
is a NIF, Cowboy cannot depend directly on it. In order
to enable QUIC and HTTP/3, users have to set the
COWBOY_QUICER environment variable:

  export COWBOY_QUICER=1

In order to run the test suites, the same must be done
for Gun:

  export GUN_QUICER=1

HTTP/3 support is currently not available on Windows
due to compilation issues of quicer which have yet to
be looked at or resolved.

HTTP/3 support is also unavailable on the upcoming
OTP-27 due to compilation errors in quicer dependencies.
Once resolved HTTP/3 should work on OTP-27.

Because of how QUIC currently works, it's possible
that streams that get reset after sending a response
do not receive that response. The test suite was
modified to accomodate for that. A future extension
to QUIC will allow us to gracefully reset streams.

This also updates Erlang.mk.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This includes Websocket over HTTP/3.

Since quicer, which provides the QUIC implementation,
is a NIF, Cowboy cannot depend directly on it. In order
to enable QUIC and HTTP/3, users have to set the
COWBOY_QUICER environment variable:

  export COWBOY_QUICER=1

In order to run the test suites, the same must be done
for Gun:

  export GUN_QUICER=1

HTTP/3 support is currently not available on Windows
due to compilation issues of quicer which have yet to
be looked at or resolved.

HTTP/3 support is also unavailable on the upcoming
OTP-27 due to compilation errors in quicer dependencies.
Once resolved HTTP/3 should work on OTP-27.

Because of how QUIC currently works, it's possible
that streams that get reset after sending a response
do not receive that response. The test suite was
modified to accomodate for that. A future extension
to QUIC will allow us to gracefully reset streams.

This also updates Erlang.mk.
</pre>
</div>
</content>
</entry>
</feed>
