java – TCP套接字具有糟糕的延迟,除非不断流式传输

注意:TCP_NODELAY似乎没有解决下面描述的问题.

主要问题:TCP套接字具有不良延迟(100ms),除非它们不断地传输数据.如果我正常发送消息,则延迟为100毫秒或更差.我尝试定期发送垃圾数​​据(每0.05秒)并将实际消息放在两者之间,并且延迟得到极大改善.

问题:为什么TCP消息在单独发送时会有不良延迟,但是当套接字流式传输大量数据时,它们具有良好的延迟?

其他一些事情:

我尝试了数据报(UDP),但仍然有一个糟糕的延迟.

我的局域网在计算机之间非常糟糕,这可能是相关的.我有一个Apple Aiport Express.我也尝试在我的Mac之间直接创建无线网络,但我仍然得到一个糟糕的ping.这可能与也可能没有关系.我不知道是否只是ping命令的结果是否具有非常低的优先级.它似乎与套接字延迟一致.

最佳答案 这可能是由
power-saving features in the wireless network adapter引起的:如果链路安静,配置为降低功率使用的适配器将在大多数时间关闭无线电,仅每100毫秒重新打开一次(或者无论您的网络的信标间隔配置为何;默认情况下,100毫秒是
check the beacon message for a flag,表示是否有任何数据包可供接收.

可以通过修改接入点的信标间隔,与有线连接上的结果进行比较和/或禁用无线适配器的所有省电功能来测试此假设;如果您的机器没有有线网络端口,那么请考虑使用USB转有线适配器进行测试.

点赞