TCP 和 UDP 的使用场景
不同的人,因性情不同,做事的方式也不一样,你不能说这样就一定好,那样就一定不好,对TCP和UDP也是一样,在不同的场景中,他们各有各的妙用。
比如在开发一个游戏的的程序是,对玩家登陆账号,由于我们要确保不同的玩家能登陆到自己的账号,这个时候就要利用TCP协议。而对控制游戏中角色的移动,我们只需根据玩家鼠标的点击移动角色,如果由于小几率的网络问题,对玩家来讲,再次进行角色移动操作便可,本钱和风险在可控范围内,因此就能够使用UDP协议。
我们从以上可以看出,如果是基础服务功能,则首先使用TCP协议,保证服务的可靠性。以确保进程中,每个网络包能够正确抵达目的地。而相较于UDP,程序员则需要自己去进一步做丢包情况和字节传输顺序的处理。
可不要因此就觉得UDP非常难用,正相反,其实有大量的服务是基于UDP协议的。比如DNS解析服务。每台电脑访问网络网页,都需要通过DNS服务解析域名,从中找到对应的IP地址。这个时候如果DNS出了问题,我们其实只需要再一次进行DNS寻址查询便可。唯一的副作用,可能就是有一丁点儿延迟罢了。
另外一个UDP的利用就是IP电话,我们常把它称作VoIP(VoiceoverIP),它的原理可以简化的理解为,把拨打电话从以往的电话通讯,转移到网络通讯上,类似于我们现在的微信通话。当你和某人通话的时候,用的就是UDP,想象一下,其实我们这个时候需要的其实不是可靠性,而是实时性。如果不幸中间有一点信息损失了,比如你妈说:“过年给我把对象带回来,不然就别回来了”。由于信息损失一部份,像这样——“过年给把对象带来,不然别回了”,其实我们是可以理解一整句话的意思的。而如果用TCP,我们可能说一句话,他人30秒以后才能听到,这明显是不能忍耐的。
因此,我们明白了,在平常的开发进程中,我们应当根据不同的利用场景,选择对应的TCP还是UDP作为网络传输协议,而不能由于我们对UDP不熟习,就从心理上抗拒它。