我正在编写一个“远程控制”应用程序,当用户在应用程序中点击按钮时,通过Wifi向本地服务器传输单个字节。因此,应用程序的感知响应速度对于良好的用户体验非常重要。
使用USB电缆将手机连接到我的PC并在调试模式下运行应用程序时,TCP连接似乎可以像用户点击按钮一样快速传输数据包。
当手机断开与PC的连接后,用户可以点击多达7个按钮(因此发送了7个带有1个字节有效负载的“send”命令),在所有7个字节被发送之前。如果用户在点击之间等待一会儿,则会出现1秒的延迟。
我尝试过将Socket.NoDelay设置为True和False,但似乎没有任何区别。
为了查看发生了什么,我使用了数据包嗅探器来查看流量情况。
当手机通过USB连接到PC(使用Wifi连接)时,每个单独的字节都在自己的数据包中,间隔约200ms。
当手机在其自己的Wifi连接上运行(与USB断开连接)时,字节仍然有自己的数据包,但它们都被分组在4或5个数据包的突发中,并且每个组与下一个组间隔约1000ms。
顺便说一句,从我的笔记本电脑测量得到,服务器在我的Wifi网络上的Ping时间为低延迟的2ms。
我意识到缓冲“发送”可能允许手机节省能源,但是否有办法禁用此“延迟”?应用程序的响应速度比节省电力更重要。