1.服务端承载能力
上百万TCP连接的网络服务,其编程难度和程序复杂度,调试难度,服务器维护成本,网络成本等都远远高于UDP。而UDP编程与上百万个终端通讯的难度与成本则很低,如果提供的网络服务不是基于流的服务,也允许一定的失败几率(例如P2P),则UDP往往是更好的选择。
2.高级应用网络通讯要求
移动端IM系统一方面提供终端在线服务,另一方面也需要考虑内容信息的完整性和安全性。毕竟信息的丢失和被窃听都是难以接受的。而TCP不管是在网络层的可靠性控制,还是在应用层的安全支持(例如HTTPS),都为应用提供无法替代的强大功能和便利。
总结:
现在移动端IM、推送系统,既面对移动互联网的不确定性,又要面对智能终端频繁的系统休眠、网络切换,还要考虑服务端的承载成本,对于在线服务而言,UDP是比TCP更合适的方式,但是由于数据完整性、安全性的需要,又不应该完全放弃TCP的可靠与安全。
所以个人认为,更恰当的方式应该是两种通信协议同时使用,各有侧重。UDP用于保持大量终端的在线与控制,应用于业务则通过TCP去实现。这个和FTP服务控制与数据分离,采取不同的连接,有异曲同工之处。
事实上这个也是QQ所采用的方式,早期的QQ主要还是使用TCP协议,而后来转向了采用UDP的方式来保持在线,TCP的方式来上传和下载数据。现在,UDP是QQ的默认工作方式,表现良好,相信这个也被沿用到了微信上。
简单的考证:登录PC版QQ,关闭多余的QQ窗口只留下主窗口,并将其最小化。几分钟过后,查看系统网络连接,会发现QQ进程已不保有任何TCP连接,但有UDP网络活动。这时在发送聊天信息,或者打开其他窗口和功能,将发现QQ进程会启用TCP连接。
小公司技术不成熟的公司建议用TCP,用UDP的话需要做的事情太多。当然QQ就是用的UDP协议,当然不仅仅是UDP,腾讯还用了自己的私有协议,来保证了传输的可靠性,杜绝了UDP下各种数据丢包,乱序等等一系列问题。总之一句话,如果你觉得团队技术很成熟,那么你用UDP也行,否则还是用TCP为好。
网友评论