Networking layer for Cloud Haskell based on QUIC.
Networking layer for Cloud Haskell based on QUIC.
The QUIC protocol has several advantages over TCP, including built-in encryption via TLS 1.3, support for connection migration (e.g. when transitioning from WIFI to 5G), and stream multiplexing which eliminates head-of-line blocking.
In dense network topologies, using [Network.Transport.QUIC] may improve performance by a factor of 2 over other transport implementations.
network-transport-quic
This package provides an implementation of the network-transport interface, where networking is done via the QUIC protocol. The primary use-case for this package is as a Cloud Haskell backend.
QUIC has many advantages over TCP, including:
- No head-of-line blocking. Independent streams mean packet loss on one stream doesn't stall others;
- Connection migration. Connections survive IP address changes, which is important when a device switches from e.g. WIFI to 5G;
- Built-in encryption via TLS 1.3;
In benchmarks, network-transport-quic performs better than network-transport-tcp in dense network topologies. For example, if every EndPoint in your network connects to every other EndPoint, you might benefit greatly from switching to network-transport-quic!
Usage example
Provided you have a TLS 1.3 certificate, you can create a Transport like so:
import Data.List.NonEmpty qualified as NonEmpty
import Network.Transport.QUIC (QUICTransportConfig(..), createTransport, credentialLoadX509)
main = do
let certificate = "path/to/cert.crt"
key = "path/to/cert.key"
creds <- credentialLoadX509 certificate key
case creds of
Left error_message -> error error_message
Right credential -> do
let config = QUICTransportConfig
{ hostName = "my.hostname.com" -- or some IP address
, serviceName = "https" -- alternatively, some port number
, credentials = NonEmpty.singleton credential
, validateCredentials = True -- should be 'False' for self-signed certificate
}
transport <- createTransport config
...
There are tools online to help create self-signed TLS 1.3 certificates.