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
63
README.md
63
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+
|
||||
|
||||
@ -47,7 +86,6 @@ built libraries and binaries for `mvfst`.
|
||||
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`
|
||||
env var.
|
||||
|
||||
```
|
||||
./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.
|
||||
|
||||
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
|
||||
|
||||
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)
|
||||
|
||||
## 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
|
||||
|
||||
Please do not open GitHub issues or pull requests - this makes the problem
|
||||
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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user