AIR 2 UDP socket(1)

  
英文原贴:http://www.insideria.com/2009/11/udp-socket-connections-for-los-1.html
翻译原贴:http://flash.9ria.com/thread-39918-1-1.html

Flash player支持socket连接,但是对于特指的UDP支持却是始终很匮乏的。 虽然最近有个额外的RTMFPA(利用UDP激活低延迟数据传输和P2P连接的协议)但是他本身不提供直接连接到UDP。
无须担心太久,Adobe AIR2带着完整的新的UDP socket连接类到来了。

flash.net.DatagramSocket
我们将涉及何物?
这将是一个多部分的系列文章,内容将涉及UDP的原理和应用,AIR2的客户端执行,和一个在JAVA 执行的基本的UDP socket服务端。

什么是UDP?
"Universal Datagram Protocol "通用数据包协议

首先让我们来看看它的竞争对手,“传输控制协议”("Transmission Control Protocol")。当你用TCP传输数据的时候,它将会做一堆的额外工作以保证数据能够安全的送达目的地。同时它也保证以相同的顺序到达。这两个特性需要在TCP包装头中传输更多的数据信息(同时也被称为 控制数据)以保持所有数据的追溯性。这也意味着在数据传输之前和送达之后要额外的多出处理程序。当它遇到网络堵塞的时候TCP可以减少扼杀带宽以在网络流量大的时候完全避免拖垮网络。尽管在很多通讯的时候TCP是最好的选择,但是有些时候它并不是最好的选择。TCP中包含的额外的处理程序和它潜在的减少拖后带宽会转化为更高的CPU利用率和更高的延迟时间。

UDP协议缺少TCP协议所提供的所有的通讯管理。它没有要求额外的协议或者处理才开始发送和接收信息。它并不保证所有发送的数据都收到或者是所有的数据包以正确的顺序接收。UDP盲目的发送信息而导致对于数据完整性过度的忽略。这意味着它的数据包不需要在他们的控制头里面携带控制数据而保持轻量。这同时也意味着它在发送数据之前或者是接收数据后做任何额外的处理。
没有额外的开销和处理UDP可以比TCP跑得更快。但是付出的代价是:UDP数据丢失比TCP多。
也许在很多情况下这个很不好。但是从另一方面来讲,对于要求低延迟和数据包不怎么严格的情况来讲,UDP还是很理想的。

什么时候需要UDP?

以下是一些使用UDP的成功案例:
双道视频流和
双道音频流(aka VOIP)、
多人大型在线游戏

在视频研究会议上考虑双道视频流。让我们将这个和单道视频流(即视频广播)对比。广播试图最小化帧丢失和阻止经过缓冲系统变向回访。数据完整性在此案中非常重要,所以基本上都使用TCP连接以重发丢失的数据包(实际上RTMP就是一个基于TCP的协议)。因此在数据传输完成和接收到之间有一点点延迟。用户不需要知道发生的确切时间,所以一个合理的延迟在这里是可以接受的。用户需要的是在看视频的时候不要任何打扰,即使所看到的东西不是实时的。
现在,想象一下在视频聊天的时候对方在听到你说话之后的几秒看见你的难度。为了使这个双向通讯的延迟最小,尽可能的使数据的接收时间接近实际时间。另外其他的潜在丢失的数据不影响实际状况。任何在之前几秒丢失的数据可以在显示当前数据的情况下给忽略掉。在此案中,这个容忍损失的本质和低延迟的可信赖性呼唤着UDP。

VOIP是一个本质上和视频会议一样,所以也同样适用。

另一个UDP比较优秀的地方是多人在线游戏。在玩你最喜欢的游戏的时候,你也许有过由于延时而死于别人枪下的不爽经验。这个在玩家的位置数据变换比别人接收到位置信息的时候经常发生。为了额外的执行位置预报算法,UDP可以提供一个更低延迟更新连接到用户,来最小化这个效果。数据丢失可以由于新的位置数据在变化中可以允许在容忍范围内。
最后,重点提示一下由于UDP不需要对它的数据做任何额外的处理,所以在系统CPU使用率很高的时候它还能保持一个普通的使用率。这意味着,一个UDP服务器可以保持一个更大的同步连接而不会将系统资源使用怠尽。在多人在线游戏服务或者一个视频会议的时候,这个可能的区别将是支持500个用户并发和1000人共用一台机器。


这里我们就了解了UDP在何时使用,下一步我们将要涉及的是使用AIR2建立一个基本的UDP客户端。


[本日志由 wolf2999 于 2010-01-13 10:25 AM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 572
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭