1:原理篇
游戏服务器一般客户端和服务器通讯一般采用tcp协议,首先了解tcp头结构:
图来自TCP/Ip协议(第九章)
其中两个字段可以用于判断当前客户端和服务器的网络情况.
(1) 4位数据偏移值,表示当前tcp包的大小.
(2) 两字节窗口大小, 表示当前tcp包发送方接收缓冲区的大小.
我们知道tcp连接时全双工的,当前socket能发送的字节受MSS和对方socket接受缓冲区大小影响,
根据以上知识,我们可以得出以下情况:
以下设计基于socket的接受缓冲区不是动态调整的,也就是tcp_window_scaling为0的情况.
(1)接收方接收缓冲区的大小足够,TCP包的大小不能达到要发送的大小.
可以判断问题是发送的数据小于接收方的处理能力.
可能原因:
(a)发送方socket的发送缓冲区大小设置问题.
(b)发送方程序调用socket send有问题. 如果是偶尔出现这种情况,检查是不是程序出现瞬卡的情况,比如程序循环, 锁冲突.
(c)网络MSS太小,检查机器以及交换机的设置.
(d)