quic-go的简单使用和代码分析

weixin_41708348 2022-01-18 12:59:28

quic-go的简单使用和代码分析

  • 环境配置
    1. Ubuntu 20.04
    2. golang 1.17.6

https://blog.csdn.net/qq_34499205/article/details/119707403

    1. quic-go 0.24.0

git clone https://github.com/lucas-clemente/quic-go.git

    1. 浏览器Firefox, 启用http3

在搜索框中输入about:config,搜索http3,找到network.http.http3.enabled, 设置为true

    1. 可选:sudo sysctl -w net.core.rmem_max=2500000

这一步是可选的,不执行这一条命令在运行程序时会报错:failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB)。。但不影响程序正确运行。

  • 运行示例程序
    1. 运行echo程序

本代码位于/quic-go/example/echo/echo.go

执行go run echo.go

这是一个简单的echo(回显)程序,客户端向服务器发送foobar,服务器收到后原封不动地返回给客户端,客户端接收到。

2. 运行http3server程序

本代码位于/quic-go/example/main.go

执行go run main.go

代表服务器已经开启,端口位于6121

打开浏览器,按下f12,打开调试工具,选择Network

注意下面的Protocol一列,如果没有这一列,可以右键其他的标签,选中Protocol即可。

在地址栏中输入网址:https://127.0.0.1:6121/demo/tile

可以看到HTTP/3协议

注意如果Firefox认为网址不安全,直接继续访问即可

注意此处的网址必须有前缀https://, 否则依然是http/1.0协议

运行http3client程序

本代码位于/quic-go/example/client/main.go

执行 go run main.go 'https://liudanking.com'

这个网址是一个能够接受quic请求的网址

当然也可以使用上述的http3server

go run main.go 'https://127.0.0.1:6121/demo/tile'

都能够得到回复

  • quic-go的源码构建

go语言的项目构建较为容易,将代码clone到本地后,在项目内运行

go test ./...

在运行测试的同时即可将所需的依赖自动下载到本地

  • quic-go性能

TCP协议需要三次握手,在加上https tls的用时,需要200-300ms才能建立链接,quic在底层基于UDP,不需要三次握手,只需要0-100ms即可建立链接,速度显著快于TCP链接

  • quic-go源码分析
    1. 由于该项目使用了gomod作为构建工具,quic-go项目架构十分清晰。http3使用的代码大部分位于http3文件夹中,共10个文件(除去测试文件)。此外还依赖于internal文件夹中的一些基础组件。
    2. http3客户端和服务端函数调用请求分析

client 发送请求的函数调用步骤                           server处理请求的函数调用步骤

     

NP 589

...全文
2211 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

571

社区成员

发帖
与我相关
我的任务
社区描述
软件工程教学新范式,强化专项技能训练+基于项目的学习PBL。Git仓库:https://gitee.com/mengning997/se
软件工程 高校
社区管理员
  • 码农孟宁
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧