技术解析

如何实现延迟小于 1ms 的 TCP 服务器?
0
2021-07-01 12:45:48
idczone

假设客户端与服务器之间只间隔一层路由(最多两层),或是本地回环,那么如何建立一个 TCP 长连接服务器(以简单的二进制回显服务器为例),使得其响应延迟小于 1ms ? 就是对时延有要求,对吞吐量无要求。

语言 C 平台 GNU/Linux


你网络能 1ms ,随便写一个 TCP 服务就是 1ms 啊

可是 ping 值为 0.2ms 左右,但简单写出来的却达到 2ms 的延迟。另外使用 libuv 是不是会加大延迟呢?

是不是建立连接握手的时间也算进去了

简单写是多简单?难道不是直接用 socket 么

tcpdump 抓包看

TCP 有 Delayed ACK 还有 Nagle 。 TCP 是面向吞吐量和网络效率设计的,严格要求时延应该用 UDP 。

楼上说的对,如果要用 TCP ,可以开启 TCP_NODELAY 试下

IPC 的方法很多,信号量 共享内存
不一定要死磕 socket

把你的读写 buffer 设置成 0 试试,提前警告大负载下性能暴降会丢包

这种情况一般上 SCTP 吧

把 buffer 尽量减小,避免 buffer bloat.
取消 delayed ack.

或者直接上 rdma
或者上 dpdk,netmap,xdp

万兆网, InfiniBand + TCP

只有我一个人想到了锐速么....
ps: TCP 主要是为了可靠传输,并不怎么讲究传输效率

这需求自相矛盾,一层路由没有必要用 tcp , tcp 也不保证你的时延

既然都内网了,干嘛还用 tcp ,直接 udp 不就行了

看着某些回答也是感觉 V 站
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服