`
AquariusM
  • 浏览: 143477 次
  • 性别: Icon_minigender_1
  • 来自: 南阳
社区版块
存档分类
最新评论

2010年9月17号---之Java与flash 通信Socket资源与理解整理

阅读更多

socket

这幅图片能够说明说明一下socket与底层的tcp/udp是什么样的关系。

而对于http来说无非是更高级的协议,socket封装了很多复杂的底层网络操作,但他仍然还是一个比较低层的操作。很多其他协议,比如Http协议和FTP协议等都是基于TCP/IP之上的,这也就意味着自己又定义了一大堆操作,但他其实仍然还是一个比较底层的操作。就算你有Socket的编程接口,也还是得去翻阅http协议文档去加载个图片或者XML。所以一般情况下,对于Flash应用非常多的应用程序协议比如http,Adobe又给封装了一把,让你可以从这些复杂的操作中脱身出来,只需要用个Loader对象就能加载个图片,并且显示出来。

 

好了我也不多说了下边这个连接里放的文章是相当不错的,道出了为什么as要支持socket的原因:

http://www.riameeting.com/node/492

 

AIR2.0入门教程[]: ServerSocket -(1) Socket简介

Posted 十二月 2nd, 2009 by bill

Adobe AIR2.0 给我们带来了好几个新特性,RIAMeeting在前面都有所介绍。如果你还没有设置好在AIR2.0测试版的开发环境,请看AIR2.0入门教程[]:新特性介绍以及开发环境的配置 

本文的阅读对象是对Socket概念不太理解或者有简单理解却不是很清楚的读者的。如果对Socket概念了解,可以略过本文,直接到下一篇中查看ServerSocket的介绍以及代码示范。我们这里的介绍,主要侧重于充当客户端的Socket概念介绍,关于ServerSocket的介绍,会在后面出现。Socket并不是AIR2.0中的新特性,而是已经存在于FlashPlayer9中的一个API.

 

 关于Flash中的Socket

大家可能经常也看到关于AIR或者Flash Player的新闻,从低版本到高版本很多人都很激动的说:支持XMLSocket了,支持Socket了,支持ServerSocket了等等。作为一个Actionscript的开发者,你也许很迷惑的想:这Socket到底是个什么玩意,大家至于这么激动么?

要说到Socket,实际上是一个网络上的概念。因为Flash这个平台以前主要是用来做很炫的动画的,后来Adobe慢慢调整其应用范围,扩展到了一些企业级应用程序的开发,线上实时游戏和AIR的桌面开发上来。你Flash原来再强悍都是搞动画的,要想在企业级应用程序开发,线上实时游戏或者桌面开发的市场上有所成就,你就得适应这个环境的需求。所以,Flash平台现在开始加入Socket方面的支持,其实是为了支持企业开发,线上实时游戏以及桌面开发。

Socket的来源

说了半天,还没有说Socket到底是什么。 所谓Socket的概念,实际上是对网络通信协议的一个封装的编程接口。如何理解呢?大家都知道我们现在用的互联网如果要通信,那要通过TCP/IP协议来进行互联通信。
TCP/IP
协议都是美国加利福尼亚大学伯克利分校的那些很牛很牛的科学家搞出来的一种描述数据应该如何封包,如何调配,如何确保数据传输安全可靠等。这协议的描述文档可能有好几百页厚。要是每个人编写涉及到网络通讯的程序都要去通读的话,估计能干这行的人没几个了。

为了能够让广大应用程序开发人员避免复杂的数学计算和繁复的文档说明,一般来说,在很多编程语言里面,都会有一个讲这些复杂的网络操作封装起来供开发人员使用的编程接口,即Socket接口。

基于Socket更高层的封装

不过,话说回来,你可能会问,我平时通过Flash加载个图片啊,加载个xml之类的不都是网络访问吗,不也没有用Socket吗。是这样的,这是由于Socket虽然封装了很多复杂的底层网络操作,但他其实仍然还是一个比较底层的操作。很多其他协议,比如HTTP协议还有FTP协议等都是基于TCP/IP之上的,也就意味他们自己又定义了一大堆操作,就算你有Socket的编程接口,你还得去翻HTTP协议文档去加载个图片或者XML。所以一般情况下,对于Flash应用非常多的应用程序协议比如http,Adobe又给封装了一把,让你可以从这些复杂的操作中脱身出来,只需要用个Loader对象就能加载个图片,并且显示出来。

更高层封装的限制

任何事情都不是完美的,HTTP协议的底层操作被封装在URLLoader这样的类里,导致作为Actionscript程序员,你只能通过HTTP协议去做一些通讯的事情。如果你想自定义自己的通信协议,或者说,你们公司有自己的通迅协议。你就行不通了。特别是HTTP协议中,有一点专门为HTTP访问优化的特点:一旦某个请求完成,这个同服务器的连接就断开了。这种机制可以让http服务器支持大量的访问,但是却给我们这些程序员造成了一个很大的问题。即时多人游戏对实时性很强,由于你无法一直跟服务器保持连接,导致你没法收到服务器的主动通知,从而不能及时得到其他游戏玩家的状态更新。这个问题其实一直都限制着广大的Flash游戏业程序员。虽然大家通过各种各样的方式来克服这个问题,但是,终究这种在HTTP协议限制下的通信机制本身就不是给你做实时游戏或者通讯的程序准备的。

Socket

到这里,大家其实能看出来,Socket是一种编程接口,这个编程接口帮你把麻烦的底层网络操作封装起来,又留给了你很大的自由空间让你自己发挥(不像URLLoader或者Loader那样制约你的一些操作)。

 Flash中加入Socket接口对开发人员的意义

1:对于开发人员来讲,Socket接口的加入,给大家打开了一扇广阔的大门。就如同我们刚刚提到过的,HTTP协议是基于Socket的一种高级别的应用程序层协议,Adobe已经将其封装,并且给大家一个URLLoader来使用。然而,Adobe不可能将所有的高级别的应用程序协议都为大家封装好供大家使用。比如说VNC VNC是一个非常有用的远程监视工具,有了VNC,你可以轻松监控一台远程电脑的桌面系统。从前VNC的客户端都是使用C++或者Java写的。现在,大家大可以直接通过Actionscript来连接到VNC服务器来显示远程桌面。 如果你对这个很感兴趣,google一下 actionscript vnc就行了。如果你对msn或者一些聊天工具感兴趣,那好,你大可以通过阅读这些聊天工具的协议文档,自己通过Actionscript去写一个Flash版的msn. gtalk等。

2:使得Flash可以适用于更多的企业开发中。Flash的优势,就是图形界面的构建成本非常低廉,比起C++,VBJava制作用户界面的开发成本不是一个级别的。 但是,企业开发中,有很多的通讯协议都是自定的,在一些电信,化工,电力方面,他们有自己的通讯协议,想通过Flash开发一个用户友好性很高而又能直接与设备进行通讯的客户界面,就需要Flash能够直接通过底层Socket来实现企业自己的自定义协议。

3Socket的另外一个最大的好处,就是通讯的实时性,当然,这是相对于HTTP来说的。我们在很多游戏平台中,由于需要多人同时游戏,就需要能够同步所有人的状态,而且是实时性越高,用户体验越好。由于Socket本身就是一个打开了的通讯管道,消息的同步变得比使用HTTP的方式更加简单也更加及时。

4AIR2.0中加入的ServerSocket更是强化了Actionscript在编程中的作用和能力。试想一下,你可以构建自己的服务,监听特定端口,甚至使用AIR2.0实现一个自己的p2p网络实现。

 

2010年10月8号补充内容:

服务器包括有状态和无状态两种类型,状态由协议本身而非实现决定。

TCP:有状态的协议

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics