{"id":13420293,"url":"https://github.com/devsisters/libquic","last_synced_at":"2025-05-15T18:03:05.694Z","repository":{"id":25796191,"uuid":"29234906","full_name":"devsisters/libquic","owner":"devsisters","description":"QUIC, a multiplexed stream transport over UDP","archived":false,"fork":false,"pushed_at":"2022-10-10T14:45:22.000Z","size":18120,"stargazers_count":1764,"open_issues_count":20,"forks_count":289,"subscribers_count":163,"default_branch":"master","last_synced_at":"2024-07-31T22:54:24.853Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://devsisters.github.io/goquic/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devsisters.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-01-14T08:36:31.000Z","updated_at":"2024-07-31T22:54:24.853Z","dependencies_parsed_at":"2022-07-15T15:00:53.654Z","dependency_job_id":null,"html_url":"https://github.com/devsisters/libquic","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsisters%2Flibquic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsisters%2Flibquic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsisters%2Flibquic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devsisters%2Flibquic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devsisters","download_url":"https://codeload.github.com/devsisters/libquic/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247737788,"owners_count":20987721,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T22:01:30.612Z","updated_at":"2025-04-07T22:11:01.873Z","avatar_url":"https://github.com/devsisters.png","language":"C++","readme":"QUIC, a multiplexed stream transport over UDP\n=============================================\n\nQUIC is an experimental protocol aimed at reducing web latency over that of TCP.\nOn the surface, QUIC is very similar to TCP+TLS+SPDY implemented on UDP. Because\nTCP is implemented in operating system kernels, and middlebox firmware, making\nsignificant changes to TCP is next to impossible. However, since QUIC is built\non top of UDP, it suffers from no such limitations.\n\nKey features of QUIC over existing TCP+TLS+SPDY include\n\n  * Dramatically reduced connection establishment time\n  * Improved congestion control\n  * Multiplexing without head of line blocking\n  * Forward error correction\n  * Connection migration\n\nSee [Chromium QUIC Page](http://www.chromium.org/quic) for detailed information.\n\n## libquic\n\nThis repository is sources and dependencies extracted from\n[Chromium's QUIC Implementation](https://chromium.googlesource.com/chromium/src.git/+/master/net/quic/)\nwith a few modifications and patches to minimize dependencies needed to build\nQUIC library.\n\nNotable and only dependency is [BoringSSL](https://boringssl.googlesource.com/).\nThe BoringSSL sources is already embedded in this repository and linked with\nCMake build file. You don't need any kind of dependency installs.\n\n## Language Bindings\n\nThis library is intended as an essential reference point for other language\nbindings and possibly for integration with other C/C++ codebase such as HTTP\nservers like Apache or nginx.\n\nCurrently there is only one experimental language binding:\n\n  * Go binding: [goquic](https://github.com/devsisters/goquic)\n\n\nGetting Started\n===============\n\n## How to build\n\nBuilding with CMake and [Ninja](https://ninja-build.org/) (Recommended):\n\n```bash\n$ mkdir build/\n$ cd build/\n$ cmake -GNinja ..\n$ ninja\n```\n\nBuilding with CMake and Make:\n\n```bash\n$ mkdir build/\n$ cd build/\n$ cmake ..\n$ make -j 4\n```\nmake -j \u003cnumOfRecepies\u003e limits the number of simultaneously executed Recepies. Adapt this number to the capabilities of your build machine.\n\n`libquic.a` library file will be generated. `libssl.a`, `libcrypto.a` will be\nlocated in build/boringssl directory.\n\nTo do release builds run `$ cmake -GNinja -DCMAKE_BUILD_TYPE=Release ..` instead\nof `$ cmake -GNinja ..`.\n\n## How to integrate\n\nIn order to integrate libquic to your code, your best source of documentation is\nofficial Chromium QUIC toy client and server. Golang binding will help too.\n\n  * [QUIC toy client and server](http://www.chromium.org/quic/playing-with-quic)\n  * [goquic C++ code](https://github.com/devsisters/goquic/tree/master/src)\n\n## Syncing from Upstream\n\nGreat effort has been made to make syncing from upstream Chromium sources as\neffortless as possible. See `DEPS` file for all the dependencies. See\n`manage.py` script for actual syncing.\n\nIf you want to apply upstream changes,\n\n  1. Clone \u0026 Checkout chromium upstream.\n  2. Build QUIC server: `cd out/Debug; ninja quic_server`\n  3. Update \"chromium_revision\" var at DEPS to your chromium source code\n     revision.\n  4. Do `./sync.py \u003cCHROMIUM_GIT_ROOT\u003e`\n     All necessary files will be updated to new ones without patches applied.\n  5. Temporarily commit here.\n  6. Do `./sync.py \u003cCHROMIUM_GIT_ROOT\u003e`--patch\n     All the patches will be applied. Some patches will be rejected.\n  7. If there is any patch collision, manually apply the rejected patches.\n     Open the `*.rej` files and carefully apply the rejected hunks manually.\n  8. Try build, and you'll find that you may need to add additional\n     modifications to make build successful. There may be added or deleted\n     source files. Update `CMakeLists.txt` accordingly.\n  9. If the build is successful, make a patch by:\n     `git diff src/ \u003e patch/basepatch.patch`\n     (Make sure you don't include `custom/` directory sources to the patch)\n  10. Add patch file to `DEPS` or update existing patch files. Amend previous\n      commit.\n  11. Commit `DEPS`, new patch, and source changes\n\n","funding_links":[],"categories":["TODO scan for Android support in followings","Networking","C++","内存分配"],"sub_categories":["网络"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevsisters%2Flibquic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevsisters%2Flibquic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevsisters%2Flibquic/lists"}