Pre*_*zel 7 sockets system.net latency windows-phone-7 windows-phone-7.1
最近,我开始使用WP7芒果版本中引入的System.Net.Sockets类,并且一直很喜欢它,但是注意到在调试模式下传输数据的延迟与在手机上正常运行的延迟存在差异.
我正在编写一个"远程控制"应用程序,当用户点击应用程序中的按钮时,该应用程序通过Wifi将单个字节传输到我的LAN上的本地服务器.因此,应用程序的感知响应性/及时性对于良好的用户体验非常重要.
通过USB电缆将手机连接到我的电脑并在调试模式下运行应用程序,TCP连接似乎可以像用户点击按钮一样快速传输数据包.
当手机与PC断开连接时,用户最多可以点击7个按钮(因此在发送所有7个字节之前,用1个字节的有效负载进行7个"发送"命令.)如果用户点击按钮并在点击之间等待一点,似乎有1秒的延迟.
我已经尝试将Socket.NoDelay设置为True和False,它似乎没有任何区别.
为了了解发生了什么,我使用了一个数据包嗅探器来查看流量是什么样的.
当手机通过USB连接到PC(使用Wifi连接)时,每个字节都在自己的数据包中间隔约200ms.
当手机在自己的Wifi连接(与USB断开连接)上运行时,字节仍然有自己的数据包,但它们都以4或5个数据包的突发组合在一起,每个组与下一个相距约1000毫秒.
顺便说一句,我的Wifi网络到服务器的Ping时间是从我的笔记本电脑测量的低2ms.
我意识到缓冲"发送"可能会让手机节省能量,但有没有办法禁用这种"延迟"?应用程序的响应能力比节省电力更重要.
这很可能不是软件问题。如果手机使用 WiFi,延迟可能会高达 70 毫秒(取决于服务器所在位置、带宽有多少、繁忙程度、对 AP 的干扰以及与 AP 的距离),但大部分延迟只是WiFi。使用 GMS、CDMA、LTE 或手机用于蜂窝数据的任何技术的速度甚至更慢。我无法想象蜂窝设备上的延迟不会低于 110 毫秒,除非您站在手机信号塔下方。