最近正在写一个支持多协议的端口转发程序这两天开始咸了
写h2部分的时候顺便调查了一下支持此协议的其他程序(v2, gost, caddy-forward-proxy, 都基于net/x/http2),发现它们虽然都有多路复用实现(v2和gost是只缓存一个client,后续发起的连接都基于它),但是每个连接都只用了一个stream。而单个stream同一时间只能在一个方向上读/写,并不是真正的全双工。我按照这种姿势实现的h2 带宽只有ws的一半
相比之下grpc的bidi-streaming则是开了两个stream,自由读写。我本来打算亲自实现像grpc那样的效果,毕竟rust的h2库提供了比较多的细节(用server push就能做到)。不过我现在打算直接实现grpc了,就用v2的格式(protobuf里面就一个bytes=1)
不知道是否有人在这方面做过测试?
|