Updating hashes
Summary: GitHub commits:
https://github.com/WhatsApp/erlang-language-platform/commit/cc2024b21d684e24cc3a0c4a8d1676e907b724e7 https://github.com/facebook/CacheLib/commit/50986d1c6001b77a6fcd5c91b6ba88d68444f697 https://github.com/facebook/fb303/commit/b3dd7124a4a435a31306dada17eb5d0e95aa580f https://github.com/facebook/fbthrift/commit/921b59d4fb61c8b8cc0ce4eade597d4687f402e1 https://github.com/facebook/folly/commit/c8c7adb72c6d73e2fced5ff5cebc96aa3ff65b2c https://github.com/facebook/hermes/commit/bd254f2ec2088bce79f0a675d54a2feb471e6a4e https://github.com/facebook/mvfst/commit/7c41b1e538d4abbcad78b52eeda8cc8b1e019548 https://github.com/facebook/proxygen/commit/694c58132151467e07732dbe2926f01f6a363820 https://github.com/facebook/pyrefly/commit/afe65f2272be705530df792160febdbcb16ab9cd https://github.com/facebook/wangle/commit/4861bc487106abd62d9f3e469146004636fccf4c https://github.com/facebookexperimental/edencommon/commit/83dfee97ac1946a00e8cea7e231e0b54135a05a7 https://github.com/facebookexperimental/rust-shed/commit/b2f41ce1662cf6f16724830884237d68acf32b58 https://github.com/facebookincubator/fizz/commit/756a0d4491d5d2dd72a262e28fbb3c529b27aee6
Reviewed By: dzhdhr
fbshipit-source-id: 3854e98c1a5e543c7fcfd0b4e4defdd71a66b7d4
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
Introduction
mvfst(Pronounced move fast) is a client and server implementation of IETF QUIC protocol in C++ by Facebook. QUIC is a UDP based reliable, multiplexed transport protocol that will become an internet standard. The goal ofmvfstis 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.mvfsthas been tested at scale on android, iOS apps, as well as servers and has several features to support large scale deployments.Features
Server features:
Client features:
Source Layout
quic/api: Defines API that applications can use to interact with the QUIC transport layer.quic/client: Client transport implementationquic/codec: Read and write codec implementation for the protocolquic/common: Implementation of common utility functionsquic/congestion_control: Implementation of different congestion control algorithms such as Cubic and Copaquic/flowcontrol: Implementations of flow control functionsquic/handshake: Implementations cryptographic handshake layerquic/happyeyeballs: Implementation of mechanism to race IPV4 and IPV6 connection and pick a winnerquic/logging: Implementation of logging frameworkquic/loss: Implementations of different loss recovery algorithmsquic/samples: Example client and serverquic/server: Server transport implementationquic/state: Defines and implements both connection and stream level state artifacts and state machinesDependencies
mvfstlargely depends on two libraries: folly and fizz.Building mvfst
Method 1 [Recommended]: //mirrors/mvfst/tree/main/UsingGetdeps.py
This script is used by many of Meta’s OSS tools. It will download and build all of the necessary dependencies first, and will then invoke cmake, etc. to build mvfst. This will help ensure that you build with relevant versions of all of the dependent libraries, taking into account what versions are installed locally on your system.
It’s written in python so you’ll need python3.6 or later on your PATH. It works on Linux, macOS and Windows.
The settings for mvfst’s cmake build are held in its getdeps manifest
build/fbcode_builder/manifests/mvfst, which you can edit locally if desired.Dependencies
If on Linux or MacOS (with homebrew installed) you can install system dependencies to save building them:
If you’d like to see the packages before installing them:
On other platforms or if on Linux and without system dependencies
getdeps.pywill mostly download and build them for you during the build step.Build
For a simplified build, you can use the
getdeps.shwrapper script. This will download and build all the required dependencies, then build mvfst. It will use the default scratch path for building and install the result in _build.At the end of the build, mvfst binaries will be installed at
_build/mvfst. You can find the scratch path from the logs or by runningpython3 ./build/fbcode_builder/getdeps.py show-build-dir mvfst.For more control over
getdeps.py, you can run the tool directly.Run tests
By default
getdeps.pywill build the tests for mvfst. You can use it to run them too:Method 2 [Deprecated]: //mirrors/mvfst/tree/main/Usingbuild.shscript
This method can be used on Ubuntu 18+ and macOS.
To begin, you should install the dependencies we need for build. This largely consists of dependencies from folly as well as fizz.
Then, build and install folly and fizz
Alternatively, run the helper script
build_helper.shin this subdirectory. It will install and link the required dependencies and also build folly and fizz. This may take several minutes the first time.After building, the directory
_build/will contain the dependencies (under_build/deps) whereas_build/buildwill contain all the built libraries and binaries formvfst.You can also install
mvfstas well as its dependenciesfollyandfizzto a custom directory using the build script, by supplying anINSTALL_PREFIXenv var.See
./build_helper.sh --helpfor more optionsYou might need to run the script as root to install to certain directories.
By default the build script
build_helper.shenables the building of test target (i.e. runs with-DBUILD_TEST=ONoption). Since some of tests inmvfstrequire some test artifacts of Fizz, it is necessary to supply the path of the Fizz src directory (via optionDFIZZ_PROJECT) to correctly build all test targets inmvfst.Run a sample client and server
Building the test targets of
mvfstshould automatically build the sample client and server binaries into the build directory.For
getdeps.pybuild, you can find the echo binary at:For the deprecated
build.shscript, it will be at the following location if you used the default build path.The server will automatically bind to
::1by default if no host is used, but you can then spin a simple echo server by running:and to run a client:
For more options, see
HTTP/3
This repo implements the QUIC transport. For an HTTP/3 implementation that uses Mvfst, please check out Proxygen.
Contributing
We’d love to have your help in making
mvfstbetter. If you’re interested, please read our guide to guide to contributingPlease feel free to open an issue to ask questions or start discussions.
License
mvfstis MIT licensed, as found in the LICENSE file.API
The API should be considered in alpha. We can’t predict all the use cases that people will have, so we’re waiting some time before declaring a more stable API. We are open to have several different APIs for different constraints.
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
mvfstcan be safely reported via Facebook’s Whitehat Bug Bounty program:https://www.facebook.com/whitehat
Facebook’s security team will triage your report and determine whether or not is it eligible for a bounty under our program.