30个版本
0.8.1 | 2024年7月22日 |
---|---|
0.7.9 | 2024年5月30日 |
0.7.2 | 2024年3月13日 |
0.6.8 | 2023年11月22日 |
0.5.4 | 2021年11月29日 |
在#firefox中排名3
1,801个星星 & 38个关注者
28KB
817 行
Neqo,用Rust编写的QUIC实现
运行测试HTTP/3程序(neqo-client和neqo-server)
cargo构建
./target/debug/neqo-server '[::]:12345' --db./test-fixture/db
./target/debug/neqo-clienthttp://127.0.0.1:12345/
如果在运行时出现“无法加载动态库”错误,请执行以下操作
export LD_LIBRARY_PATH="$(dirname "$(find . -name libssl3.so -print | head -1)")"
在macOS上,请执行
export DYLD_LIBRARY_PATH="$(dirname "$(find . -name libssl3.dylib -print | head -1)")"
使用单独的NSS/NSPR加速构建
您可以将NSS(https://hg.mozilla.org/projects/nss)和NSPR(https://hg.mozilla.org/projects/nspr)克隆到同一目录中,并导出一个名为NSS_DIR
的环境变量,指向NSS。这将导致构建使用现有的NSS签出。然而,为了运行依赖于NSS的任何内容,您需要将$\[DY]LD\_LIBRARY\_PATH
设置为指向$NSS_DIR/../dist/Debug/lib
。
注意:如果您没有单独编译NSS,您需要安装mercurial(hg)。NSS构建需要gyp,还需要ninja(或ninja-build)。
调试Neqo
QUIC日志
使用以下方式启用QLOG
$ mkdir "$logdir"
$ ./target/debug/neqo-server '[::]:12345' --db ./test-fixture/db --qlog-dir "$logdir"
$ ./target/debug/neqo-client 'https://[::]:12345/' --qlog-dir "$logdir"
您可以通过上传QLOG文件并使用https://qvis.quictools.info/来可视化流。
使用SSLKEYLOGFILE解密Wireshark日志
待办事项:需要什么是最小的Wireshark版本?待办事项:上面的链接可能不正确,协议现在称为TLS而不是SSL?
有效地使用RUST_LOG
如env_logger文档中所述,可以使用环境变量RUST_LOG
有选择地启用Rust代码中的日志消息。这对于Neqo的命令行工具以及Neqo集成到Gecko时都适用,尽管Gecko需要以调试模式构建。
一些示例
RUST_LOG=neqo_transport::dump ./mach run
仅列出发送和接收的QUIC数据包及其帧的内容。RUST_LOG=neqo_transport=debug,neqo_http3=trace,info ./mach run
为传输设置“调试”日志级别,为http3设置“跟踪”级别,并为所有其他Rust包设置“信息”日志级别,包括Neqo和Gecko使用的其他包。RUST_LOG=neqo=trace,error ./mach run
为以"neqo"开头的所有模块设置trace
级别,并将error
设置为其他不相关Rust日志消息的最小日志级别。
在Gecko中尝试开发中的Neqo代码
在Gecko源代码签出的副本中,将四个Neqo包的值设置为根目录下的Cargo.toml
中的本地版本。例如,如果Neqo签出为/home/alice/git/neqo
,请向根目录的Cargo.toml
中添加以下行。
[patch."https://github.com/mozilla/neqo"]
neqo-http3 = { path = "/home/alice/git/neqo/neqo-http3" }
neqo-transport = { path = "/home/alice/git/neqo/neqo-transport" }
neqo-common = { path = "/home/alice/git/neqo/neqo-common" }
neqo-qpack = { path = "/home/alice/git/neqo/neqo-qpack" }
neqo-crypto = { path = "/home/alice/git/neqo/neqo-crypto" }
然后执行以下操作
./mach vendor rust
使用./mach build
按常规编译Gecko。
注意:使用与Gecko兼容的较新Neqo代码可能还需要更改(可能为neqo_glue
),如果有些内容已更改。
依赖关系
~3MB
~51K SLoC