一、 基于quic-go的MPQUIC简介
1. 项目介绍网站:Multipath QUIC
2. 参考论文:https://multipath-quic.org/conext17-deconinck.pdf
3. 官方安装参考教程:CoNEXT 2017 Artifacts Available
4. Github mp-quic源码:GitHub - qdeconinck/mp-quic: Please read https://multipath-quic.org/2017/12/09/artifacts-available.html to figure out how to setup the code.
二、 项目安装
1. 官方教程的问题
上面给出的mp-quic代码时基于quic-go的,但是由于quic-go和go 源码库的版本一直在更新而mp-quic在2022年就不更新了,所以按照上述给教程会有版本不匹配问题。例如当前quic-go库的模块名为github.com/quic-go/quic-go, 而mpquic导入quic-go库时导入的模块名为github.com/lucas-clemente/quic-go,这是旧版本的quic-go的模块名。 同时,博主目前没有查阅到相关资料表明明确的mp-quic对应的quic-go版本和go 版本。
2. 解决办法
mp-quic github上源码有一个pull request,其实现了mp-quic与quic-go指定版本的融合,并明确使用了go 1.17版本,此外其也解决了依赖项的版本兼容。这个fork仓库的代码为GitHub - jmwample/mp-quic at conext17-1。我们基于该版本代码进行安装
博主使用的go版本为1.20可以跑通
(1) 在指定目录新建文件夹名为MPQUIC(假设该文件夹路径为C:/Users/PC/MPQUIC), 进入MPQUIC文件执行命令下载代码:git clone git@github.com:jmwample/mp-quic.git
(2) 进入mp-quic文件夹内,此时所在目录为C:/Users/PC/MPQUIC/mp-quic。切换到指定分支,执行命令: git checkout conext17-1 -- force
(3) 执行模块编译: go mod tidy, go build成功后已经将可当做外部模块使用
(4) 使用模块:由于外部模块没有导入进GOPATH环境,所以我们在使用该模块时需要指定路径。假设我的一个项目要使用mp-quic模块,go.mod文件中需这样引入
//go .mod文件
module demo
go 1.20
require (github.com/lucas-clemente/quic-go v0.33.0
... //其他的依赖项
)
replace github.com/lucas-clemente/quic-go v0.33.0 =>C:/Users/PC/MPQUIC/mp-quic