假设客户端与服务器之间只间隔一层路由(最多两层),或是本地回环,那么如何建立一个 TCP 长连接服务器(以简单的二进制回显服务器为例),使得其响应延迟小于 1ms ? 就是对时延有要求,对吞吐量无要求。
语言 C 平台 GNU/Linux
1
wtbhk 2016 年 11 月 29 日
你网络能 1ms ,随便写一个 TCP 服务就是 1ms 啊
|
4
yangqi 2016 年 11 月 29 日
简单写是多简单?难道不是直接用 socket 么
|
5
xuboying 2016 年 11 月 29 日 via iPhone
tcpdump 抓包看
|
6
XiaoxiaoPu 2016 年 11 月 29 日 TCP 有 Delayed ACK 还有 Nagle 。 TCP 是面向吞吐量和网络效率设计的,严格要求时延应该用 UDP 。
|
7
xxxyyy 2016 年 11 月 29 日 via Android 楼上说的对,如果要用 TCP ,可以开启 TCP_NODELAY 试下
|
8
q397064399 2016 年 11 月 30 日
IPC 的方法很多,信号量 共享内存
不一定要死磕 socket |
9
k9982874 2016 年 11 月 30 日 via iPad
把你的读写 buffer 设置成 0 试试,提前警告大负载下性能暴降会丢包
|
10
uvhchina 2016 年 11 月 30 日
这种情况一般上 SCTP 吧
|
11
introom 2016 年 11 月 30 日 via Android
把 buffer 尽量减小,避免 buffer bloat.
取消 delayed ack. 或者直接上 rdma 或者上 dpdk,netmap,xdp |
12
est 2016 年 11 月 30 日
万兆网, InfiniBand + TCP
|
13
fiht 2016 年 11 月 30 日
只有我一个人想到了锐速么....
ps: TCP 主要是为了可靠传输,并不怎么讲究传输效率 |
14
sibaru 2016 年 11 月 30 日
这需求自相矛盾,一层路由没有必要用 tcp , tcp 也不保证你的时延
|
15
0987363 2016 年 11 月 30 日
既然都内网了,干嘛还用 tcp ,直接 udp 不就行了
|
16
samueldeng 2016 年 12 月 1 日
看着某些回答也是感觉 V 站💊系列。
如果 ping 的时延在 0.2ms ,而 TCP 在 2ms ,那么 1.8ms 多半是损耗在了 protocol stack 及以上了。 如果不动应用层 code 不是楼主维护的话,我想楼主只能从 Linux 内核层面去优化了。 我倒建议说,首先换网卡 /驱动,先试试 2 层有无优化空间,再如楼上说的,试着调整下 TCP 的参数。 其次,应用层:考虑到本地环境丢包较少的情况,只需要加快应用层到驱动的处理逻辑,因此,可以考虑说,减小每一层的 Buffer 大小。 总之,具体问题具体分析吧,不如 po 段测试代码出来看看。:> |