mirror of
https://github.com/facebookincubator/mvfst.git
synced 2025-04-18 17:24:03 +03:00
add overview of MVFST and other info in README
Summary: Adds more info on README Reviewed By: siyengar Differential Revision: D15145263 fbshipit-source-id: 93fa6cb37250a08fd78577013d9eb9d20d74430b
This commit is contained in:
parent
f5310e174c
commit
8399a99add
97
README.md
97
README.md
@ -1,6 +1,45 @@
|
|||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
`mvfst` is a client and server implementation of [IETF QUIC](https://tools.ietf.org/html/draft-ietf-quic-transport-20) protocol in C++ by Facebook. QUIC is a UDP based reliable, multiplexed transport protocol that will become an internet standard. The goal of `mvfst` is to build a performant implementation of the QUIC transport protocol that applications could adapt for use cases on both the internet and the data-center. `mvfst` has been tested at scale on android, iOS apps, as well as servers and has several features to support large scale deployments.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
**Server features**:
|
||||||
|
- Multi-threaded UDP socket server with a thread local architecture to be able to scale to multi-core servers
|
||||||
|
- Customizable Connection-Id routing. The default Connection-Id routing implementation integrates seamlessly with [katran](https://github.com/facebookincubator/katran)
|
||||||
|
- APIs to enable zero-downtime restarts of servers, so that applications do not have to drop connections when restarting.
|
||||||
|
- APIs to expose transport and server statistics for debuggability
|
||||||
|
- Zero-Rtt connection establishment and customizable zero rtt path validation
|
||||||
|
- Support for UDP Generic segmentation offloading (GSO) for faster UDP writes.
|
||||||
|
|
||||||
|
**Client features**:
|
||||||
|
- Native happy eyeballs support between ipv4 and ipv6 so that applications do not need to implement it themselves
|
||||||
|
- Pluggable congestion control and support for turning off congestion control to plug in application specific control algorithms
|
||||||
|
- QUIC trace APIs to retrieve deep transport level stats.
|
||||||
|
|
||||||
|
## Source Layout
|
||||||
|
- `quic/api`: Defines API that applications can use to interact with the QUIC transport layer.
|
||||||
|
- `quic/client`: Client transport implementation
|
||||||
|
- `quic/server`: Server transport implementation
|
||||||
|
- `quic/codec`: Read and write codec implementation for the protocol
|
||||||
|
- `quic/common`: Implementation of common utility functions
|
||||||
|
- `quic/congestion_control`: Implementation of different congestion control algorithms such as Cubic and Copa
|
||||||
|
- `quic/flowcontrol`: Implementations of flowcontrol functions
|
||||||
|
- `quic/handshake`: Implementations cryptographic handshake layer
|
||||||
|
- `quic/loss`: Implementations of different loss recovery algotithms
|
||||||
|
- `quic/logging`: Implementation of logging framework
|
||||||
|
- `quic/happyeyeballs`: Implementation of mechanism to race IPV4 and IPV6 connection and pick a winner
|
||||||
|
- `quic/state`: Defines and implements both connection and stream level state artifacts and state machines
|
||||||
|
- `quic/tools`: Implementation of tools such as one to trace transport events within a connection
|
||||||
|
- `quic/sample`: Example client and server
|
||||||
|
|
||||||
|
|
||||||
## Building
|
## Dependencies
|
||||||
|
|
||||||
|
`mvfst` largely depends on two libraries: [folly](https://www.github.com/facebook/folly) and [fizz](https://www.github.com/facebookincubator/fizz).
|
||||||
|
|
||||||
|
## Building mvfst
|
||||||
|
|
||||||
### Ubuntu 16+
|
### Ubuntu 16+
|
||||||
|
|
||||||
@ -9,24 +48,24 @@ consists of dependencies from [folly](https://github.com/facebook/folly) as well
|
|||||||
[fizz](https://github.com/facebookincubator/fizz).
|
[fizz](https://github.com/facebookincubator/fizz).
|
||||||
|
|
||||||
```
|
```
|
||||||
sudo apt-get install \
|
sudo apt-get install \
|
||||||
g++ \
|
g++ \
|
||||||
cmake \
|
cmake \
|
||||||
libboost-all-dev \
|
libboost-all-dev \
|
||||||
libevent-dev \
|
libevent-dev \
|
||||||
libdouble-conversion-dev \
|
libdouble-conversion-dev \
|
||||||
libgoogle-glog-dev \
|
libgoogle-glog-dev \
|
||||||
libgflags-dev \
|
libgflags-dev \
|
||||||
libiberty-dev \
|
libiberty-dev \
|
||||||
liblz4-dev \
|
liblz4-dev \
|
||||||
liblzma-dev \
|
liblzma-dev \
|
||||||
libsnappy-dev \
|
libsnappy-dev \
|
||||||
make \
|
make \
|
||||||
zlib1g-dev \
|
zlib1g-dev \
|
||||||
binutils-dev \
|
binutils-dev \
|
||||||
libjemalloc-dev \
|
libjemalloc-dev \
|
||||||
libssl-dev \
|
libssl-dev \
|
||||||
pkg-config \
|
pkg-config \
|
||||||
libsodium-dev
|
libsodium-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -47,7 +86,6 @@ built libraries and binaries for `mvfst`.
|
|||||||
You can also install `mvfst` as well as its dependencies `folly` and `fizz`
|
You can also install `mvfst` as well as its dependencies `folly` and `fizz`
|
||||||
to a custom directory using the build script, by supplying an `INSTALL_PREFIX`
|
to a custom directory using the build script, by supplying an `INSTALL_PREFIX`
|
||||||
env var.
|
env var.
|
||||||
|
|
||||||
```
|
```
|
||||||
./build_helper.sh -i /usr/local
|
./build_helper.sh -i /usr/local
|
||||||
```
|
```
|
||||||
@ -55,19 +93,34 @@ See `./build_helper.sh --help` for more options
|
|||||||
|
|
||||||
You might need to run the script as root to install to certain directories.
|
You might need to run the script as root to install to certain directories.
|
||||||
|
|
||||||
|
By default the build script `build_helper.sh` enables the building of test target (i.e. runs with `-DBUILD_TEST=ON` option). Since some of tests in `mvfst` require some test artifacts of Fizz, it is necessary to supply the path of the Fizz src directory (via option `DFIZZ_PROJECT`) to correctly build all test targets in `mvfst`.
|
||||||
|
|
||||||
|
## Run a sample client and server
|
||||||
|
Building the test targets of `mvfst` (or via `build_helper.sh`) should automatically build the sample client and server binaries as well. You can then spin a simple echo server by running:
|
||||||
|
```
|
||||||
|
./quic/samples/echo -mode=server -host=<ip> -port=<port>
|
||||||
|
```
|
||||||
|
and to run a client:
|
||||||
|
```
|
||||||
|
./quic/samples/echo -mode=client -host=<ip> -port=<port>
|
||||||
|
```
|
||||||
|
For more options, see
|
||||||
|
```
|
||||||
|
./quic/samples/echo --help
|
||||||
|
```
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
We'd love to have your help in making MVFST better. If you're interested, please
|
We'd love to have your help in making `mvfst` better. If you're interested, please
|
||||||
read our guide to [guide to contributing](CONTRIBUTING.md)
|
read our guide to [guide to contributing](CONTRIBUTING.md)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
MVFST is MIT licensed, as found in the LICENSE file.
|
`mvfst` is MIT licensed, as found in the LICENSE file.
|
||||||
|
|
||||||
## Reporting and Fixing Security Issues
|
## Reporting and Fixing Security Issues
|
||||||
|
|
||||||
Please do not open GitHub issues or pull requests - this makes the problem
|
Please do not open GitHub issues or pull requests - this makes the problem
|
||||||
immediately visible to everyone, including malicious actors. Security issues in
|
immediately visible to everyone, including malicious actors. Security issues in
|
||||||
MVFST can be safely reported via Facebook's Whitehat Bug Bounty program:
|
`mvfst` can be safely reported via Facebook's Whitehat Bug Bounty program:
|
||||||
|
|
||||||
https://www.facebook.com/whitehat
|
https://www.facebook.com/whitehat
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user