4-回顾基础的sockets API

我们需要关心的性能指标

  • 带宽(Bandwidth),MB/s
  • 吞吐量(Throughput),messages/s,queries/s(QPS),transaction/s(TPS)。应用层面
  • 延迟
  • 资源使用率

使用 ttcp 作为第一个例子的理由

ttcp - Wikipedia

  • 使用了基本的sockets APIs:socket,listen, bind, accept,connect,read/recv,write/send,shutdown,close 等等
  • 协议带有格式,不只是字节流,相较于echo具有tcp分包处理等
  • ttcp 本身是由 tcp/ip 实现的程序,具有一些典型的行为。可以阅读其代码学习它的一些优秀实现
  • 协议简单,可以由多种语言实现,针对测试结果对比个语言实现的runtime开销
  • 无并发连接,client与server之间只有一个tcp socket

TTCP协议

image-20230210083928669

  • SessionMessage

这个结构体是客户端往服务端发送的第一个消息,大小为8B。其中number表示发送多少个PayloadMessage,而length表示PayloadMessage。按上图来说,num=1024,len=8192,代表发送1024个大小为8192的PayloadMessage。

  • PayloadMessage

这个结构体是客户端发送给服务端的有效载荷,其中length对应SessionMessage的length,data[0]是一个柔性数组,大小由运行时写入的数据为准,所以这里需要一个length成员记录data的长度。所以PayloadMessage的真正大小为8192+4=8196B。

  • 协议本身

客户端先往服务端发送SessionMessage,告诉服务端发送多少次数据,每次数据多大。发送期间客户端,需要收到服务端的Ack才继续发下一个PayloadMessage。最后在客户端计算RoundTrip。(这里的Ack有两个含义,一个是应用层的Ack,一个是TCP的Ack)。

posted @ 2023-04-27 19:10  DavidJIAN  阅读(19)  评论(0)    收藏  举报