首页
Search
1
yamux: how to work?
79 阅读
2
The Art of Memory Allocation: Malloc, Slab, C++ STL, and GoLang Memory Allocation
70 阅读
3
How to receive a network packet in Linux
63 阅读
4
Maps and Memory Leaks in Go
54 阅读
5
C++ redis connection pool
52 阅读
测试
Wireguard
K8s
Redis
C++
Golang
Libcurl
Tailscale
Nginx
Linux
web3
Uniswap V2
Uniswap V3
EVM
security
solidity
openzeppelin
登录
Search
标签搜索
web3
solidity
web3 security
c++
uniswapV3
redis
evm
uniswap
性能测试
k8s
wireguard
CNI
http
tailscale
nginx
linux
设计模式
Jericho
累计撰写
51
篇文章
累计收到
13
条评论
首页
栏目
测试
Wireguard
K8s
Redis
C++
Golang
Libcurl
Tailscale
Nginx
Linux
web3
Uniswap V2
Uniswap V3
EVM
security
solidity
openzeppelin
页面
搜索到
6
篇与
的结果
2023-02-15
yamux: how to work?
{collapse}{collapse-item label="一、项目地址" open} giuthub:yamux {/collapse-item}{collapse-item label="二、消息格式" open}yamux头部数据flag的类型消息类型{/collapse-item}{collapse-item label="三、数据交互流程" open} 1.双方tcp三次握手完成之后,客户端发起处理请求需要创建一个新的stream,客户端发送yamux封装的syn包给服务端,这个封装的包是12个字节,服务端回复ack2.服务端收到客户端yamux封装的syn包后,封装yamux的syn ack包给客户端,这个封装的包是12个字节,客户端回复ack,此时双方共识了这个stream3.客户端或者服务端需要发送数据给对方时,需要先发送一个yamux封装的数据包头,12个字节,指明要发送的数据的长度,对方回应一个ack,之后就开始发送数据包{/collapse-item}{collapse-item label="四、调用read收包原理" open} 创建完一个stream之后,返回的是一个net.conn类型的接口,收数据包时,调用net.conn接口的read时,实际上调用的是stream对象的read,stream的read使用goto的方法判断recvBuf有没有数据,有数据将数据拷贝给read函数的参数buf中,并返回拷贝的数据大小在recvloop的协程中通过io.readFull从soket中收到数据包头时,根据数据包头的消息类型调用提前绑定好的函数,如果数据类型是data类型,则会调用readData函数,将数据拷贝到recvBuf中{/collapse-item}{/collapse}
2023年02月15日
79 阅读
2 评论
2 点赞
1
2