
利用套接字机制实现Flash与数据库连接
发布时间:2006-03-20 11:21:43 来源:天极开发 网友评论 0 条
无论对于Java开发者还是.NET开发者来说,在Flash中创建一个数据库连接都不是件简单的事情。由于解决这一问题需要费不少的周折,所以本文中我们通过建立一个XMLSocket类来帮助实现这一技术。
一、 简介
对于一位具有传统型客户-服务器背景的开发人员来说,转入到ActionScript开发并把Flash连接到一个数据库肯定需要费不少的周折。在.NET或Java世界中,通过直接从应用程序中调用数据库,你仅需要打开一个到数据库的连接并且执行数据库操作即可;而在Flash情况下事情并不这么简单。在本文中,我将向你介绍解决这一问题的办法。
即使在一个非传统型开发环境例如Flash中,进行数据库连接都是非常必要的。例如,你可能想要存储一个游戏中的高分,或任何需要在会话间持续存储的用户信息。而且,对于灵活的数据库连接的需求也正在增长,因为现在已经有越来越多的人基于Flash方案构建丰富的互联网应用程序。
归纳来看,共有三种方式可以使一个Flash应用程序连接到数据库上:
· 使用XMLConnector组件;
· 使用XML与CGI的结合;
· 使用XMLSocket类。
必须清醒地认识到,没有直接的把Flash连接到一个数据库的方法;必须有一个应用程序来担当Flash和数据库的中介。上面描述的每个方法都使用了这种机制-每一种在实现方式上稍有不同且包含不同的Flash特征。
第一种方法在Flash帮助中有良好的说明,在此不再多言。
第二种方法使用在Flash一端的XML类与在服务器端的一个CGI应用程序的结合,它比较适合于网络应用不存在问题的情况下。这种方法使用一个POST HTTP请求来连接到应用程序服务器。有关此更好的解释,请参考Flash帮助资料(ActionScript参考指南>用外部数据工作>从远程源中发送和装载变量>使用XML类)。
第三个方法(本文将集中讨论),因为某些原因,具有极少的文档可参考。然而,从一个程序员的角度来看,它却是提供最多的控制的方法。对于一位非Flash程序员来说,这也是最熟悉的数据库交互的比喻。根据Flash帮助信息,"XMLSocket…维持一打开的到服务器的连接,它允许服务器可以在没有一来自客户方请求的情况下立即发送到来的消息。"
为了展示XMLSocket的使用方法,我构建了一个简单的应用程序:一个Flash数据库前端(见图1)。这对于使用查询工具的用户是非常熟悉的,因为它实现了常用设计:屏幕提供了认证信息字段,还有一个字段用于输入要被传递到数据库的SQL命令。虽然不可能任何人都会用Flash构建一个完整功能的数据库查询工具,但是在本示例中所用的方法可以为实现任何特定的需要而加以定制。
二、 基本原则
实际的数据库操作是通过一个后端Java应用程序(在Flash帮助中称为"daemon")实现的,它经由JDBC(Java数据库连接)连接到数据库。我选择了Java是因为它跨平台并且还因为它的语法易于为ActionScript开发者们所理解。一个基于.NET的后端在概念上看起来与此相似。
就算你不知道Java,如果你有一些使用ActionScript的经验,那么你应该毫无问题地理解本文。如果你是一个Java或.NET程序员而没有深厚的Flash经验,那么我也希望本文能提供一些信息来帮助你使用熟悉的概念构建你的数据库连接框架。
注意 为试验本文程序你需要:
· Flash MX 2004 或Flash 8(专业版)
· Java IDE(我使用的是Eclipse 3.0)
· Microsoft SQL Server 2000 driver for JDBC
· SQL Server 2000
Java后端和Flash前端将通过套接字通讯。在Java中,套接字分为服务器套接字(听取并响应到来的请求)和客户套接字(把请求发送到服务器套接字)两大类。有关Java套接字的完整讨论已经超出本文的范围,因此如果你对它们不熟悉的话,请参考网上其它资源;对于本文目的来说,把套接字当作是两个应用程序之间通过网络的数字连接已经足够了。
请注意,Flash仅仅支持"客户套接字"-它能连接到一个服务器,但是不担当到其它客户套接字的服务器,并且是在XMLSocket类中实现的。
XMLSocket有一些限制:
· 仅有可能连接到大于或等于1024的TCP端口;
· 默认情况下,安全约束会禁止连接到一个运行于不同域上的服务器应用程序(而不是SWF文件)。这个默认行为可以通过重载来解决,详见Flash参考文档。
为使得通讯具有意义,这两个应用程序必须使用一互相都能理解的协议(在本文情况中,我们基于XML):一个以0为终结符的XML文件被Flash发送到后端应用程序并且执行一定操作(在我们的情况中是数据库存取)。
在我们的查询工具情况下,在数据库上执行一个命令是一个两步的过程:首先,使用提供的凭证连接到数据库。然后,如果连接成功,发送和执行该命令(作为SQL语句)。由于我构建的查询应用程序具有的特点(一个会话可能包括许多事务)以及我想在Java和Flash之间构建一个更复杂一些的通讯协议,所以我选择了这种两步过程。然而,有可能把认证和执行结合到一个步骤中-发送到Java应用程序的来自Flash的消息只需简单地包括认证信息和命令;然后,Java后端将返回该SQL命令的输出(或,在连接或执行失败情况下,对应一条错误消息)。
为了实现到一个SQL Server数据库的认证,要求提供下列信息:
· 数据库服务器的IP地址;
· 数据库登录和口令;
· 数据库名;
· 该Java应用程序的IP地址或DNS名(它可以与数据库IP名字相同,也可以不同)。
一旦该Java应用程序检测到一个连接尝试,它将尽量分析它所收到的XML消息。如果它是一条'open connection'消息,该应用程序将从数据库服务器中提取IP地址、登录、口令和数据库名;它将尝试打开一个到数据库的JDBC连接;如果成功,它将把一条XML消息和唯一的连接句柄返回到Flash前端。它还将把认证信息和连接数字(一个"句柄")添加到一内部的连接集合上。
跟随一个成功的连接,该前端发送一SQL命令,它还在消息中包含了连接句柄。一旦接收一个SQL命令,后端将提取属于该连接句柄的认证信息并且使用它把该命令发送到数据库。
前端所发送的打开一个连接的XML消息具有下列格式:
<flashLogon>
<IPAddr>127.0.0.1</IPAddr>
<Login>sa</Login>
<Password>admin_password</Password>
<Database>user_database</Database>
</flashLogon>
请注意,这里的前端有两个IP地址域:一个持有IP地址或Java应用程序正在其上运行(端口号1024)的服务器的DNS名,而另外一个持有数据库服务器的IP地址;上面的<IPAddr>引用了数据库服务器。
处理一个SQL命令的消息有下列格式:
<flashCommand>
<Command>SELECT * FROM Table1</Command>
<Connection>1</Connection>
</flashCommand>
如果连接是成功的,Java服务器应用程序将返回下列消息:
<Connection>
<HConnection>1</HConnection>
</Return>
处理一个命令后,返回一条类似于下面的消息:
<Return>
120
</Return>
然而,这条消息也可能更复杂些,例如:
<Return>
Michaels,Rich,1200,10962 Acacia St
King,Mary,98012,11128 Maryland Ave
</Return>
它还有可能包含一条错误消息,例如:
<Return>
SQL Error 101 Table does not exist.
</Return>
一、 简介
对于一位具有传统型客户-服务器背景的开发人员来说,转入到ActionScript开发并把Flash连接到一个数据库肯定需要费不少的周折。在.NET或Java世界中,通过直接从应用程序中调用数据库,你仅需要打开一个到数据库的连接并且执行数据库操作即可;而在Flash情况下事情并不这么简单。在本文中,我将向你介绍解决这一问题的办法。
即使在一个非传统型开发环境例如Flash中,进行数据库连接都是非常必要的。例如,你可能想要存储一个游戏中的高分,或任何需要在会话间持续存储的用户信息。而且,对于灵活的数据库连接的需求也正在增长,因为现在已经有越来越多的人基于Flash方案构建丰富的互联网应用程序。
归纳来看,共有三种方式可以使一个Flash应用程序连接到数据库上:
· 使用XMLConnector组件;
· 使用XML与CGI的结合;
· 使用XMLSocket类。
必须清醒地认识到,没有直接的把Flash连接到一个数据库的方法;必须有一个应用程序来担当Flash和数据库的中介。上面描述的每个方法都使用了这种机制-每一种在实现方式上稍有不同且包含不同的Flash特征。
第一种方法在Flash帮助中有良好的说明,在此不再多言。
第二种方法使用在Flash一端的XML类与在服务器端的一个CGI应用程序的结合,它比较适合于网络应用不存在问题的情况下。这种方法使用一个POST HTTP请求来连接到应用程序服务器。有关此更好的解释,请参考Flash帮助资料(ActionScript参考指南>用外部数据工作>从远程源中发送和装载变量>使用XML类)。
第三个方法(本文将集中讨论),因为某些原因,具有极少的文档可参考。然而,从一个程序员的角度来看,它却是提供最多的控制的方法。对于一位非Flash程序员来说,这也是最熟悉的数据库交互的比喻。根据Flash帮助信息,"XMLSocket…维持一打开的到服务器的连接,它允许服务器可以在没有一来自客户方请求的情况下立即发送到来的消息。"
为了展示XMLSocket的使用方法,我构建了一个简单的应用程序:一个Flash数据库前端(见图1)。这对于使用查询工具的用户是非常熟悉的,因为它实现了常用设计:屏幕提供了认证信息字段,还有一个字段用于输入要被传递到数据库的SQL命令。虽然不可能任何人都会用Flash构建一个完整功能的数据库查询工具,但是在本示例中所用的方法可以为实现任何特定的需要而加以定制。
二、 基本原则
实际的数据库操作是通过一个后端Java应用程序(在Flash帮助中称为"daemon")实现的,它经由JDBC(Java数据库连接)连接到数据库。我选择了Java是因为它跨平台并且还因为它的语法易于为ActionScript开发者们所理解。一个基于.NET的后端在概念上看起来与此相似。
就算你不知道Java,如果你有一些使用ActionScript的经验,那么你应该毫无问题地理解本文。如果你是一个Java或.NET程序员而没有深厚的Flash经验,那么我也希望本文能提供一些信息来帮助你使用熟悉的概念构建你的数据库连接框架。
注意 为试验本文程序你需要:
· Flash MX 2004 或Flash 8(专业版)
· Java IDE(我使用的是Eclipse 3.0)
· Microsoft SQL Server 2000 driver for JDBC
· SQL Server 2000
Java后端和Flash前端将通过套接字通讯。在Java中,套接字分为服务器套接字(听取并响应到来的请求)和客户套接字(把请求发送到服务器套接字)两大类。有关Java套接字的完整讨论已经超出本文的范围,因此如果你对它们不熟悉的话,请参考网上其它资源;对于本文目的来说,把套接字当作是两个应用程序之间通过网络的数字连接已经足够了。
请注意,Flash仅仅支持"客户套接字"-它能连接到一个服务器,但是不担当到其它客户套接字的服务器,并且是在XMLSocket类中实现的。
XMLSocket有一些限制:
· 仅有可能连接到大于或等于1024的TCP端口;
· 默认情况下,安全约束会禁止连接到一个运行于不同域上的服务器应用程序(而不是SWF文件)。这个默认行为可以通过重载来解决,详见Flash参考文档。
为使得通讯具有意义,这两个应用程序必须使用一互相都能理解的协议(在本文情况中,我们基于XML):一个以0为终结符的XML文件被Flash发送到后端应用程序并且执行一定操作(在我们的情况中是数据库存取)。
在我们的查询工具情况下,在数据库上执行一个命令是一个两步的过程:首先,使用提供的凭证连接到数据库。然后,如果连接成功,发送和执行该命令(作为SQL语句)。由于我构建的查询应用程序具有的特点(一个会话可能包括许多事务)以及我想在Java和Flash之间构建一个更复杂一些的通讯协议,所以我选择了这种两步过程。然而,有可能把认证和执行结合到一个步骤中-发送到Java应用程序的来自Flash的消息只需简单地包括认证信息和命令;然后,Java后端将返回该SQL命令的输出(或,在连接或执行失败情况下,对应一条错误消息)。
为了实现到一个SQL Server数据库的认证,要求提供下列信息:
· 数据库服务器的IP地址;
· 数据库登录和口令;
· 数据库名;
· 该Java应用程序的IP地址或DNS名(它可以与数据库IP名字相同,也可以不同)。
一旦该Java应用程序检测到一个连接尝试,它将尽量分析它所收到的XML消息。如果它是一条'open connection'消息,该应用程序将从数据库服务器中提取IP地址、登录、口令和数据库名;它将尝试打开一个到数据库的JDBC连接;如果成功,它将把一条XML消息和唯一的连接句柄返回到Flash前端。它还将把认证信息和连接数字(一个"句柄")添加到一内部的连接集合上。
跟随一个成功的连接,该前端发送一SQL命令,它还在消息中包含了连接句柄。一旦接收一个SQL命令,后端将提取属于该连接句柄的认证信息并且使用它把该命令发送到数据库。
前端所发送的打开一个连接的XML消息具有下列格式:
<flashLogon>
<IPAddr>127.0.0.1</IPAddr>
<Login>sa</Login>
<Password>admin_password</Password>
<Database>user_database</Database>
</flashLogon>
请注意,这里的前端有两个IP地址域:一个持有IP地址或Java应用程序正在其上运行(端口号1024)的服务器的DNS名,而另外一个持有数据库服务器的IP地址;上面的<IPAddr>引用了数据库服务器。
处理一个SQL命令的消息有下列格式:
<flashCommand>
<Command>SELECT * FROM Table1</Command>
<Connection>1</Connection>
</flashCommand>
如果连接是成功的,Java服务器应用程序将返回下列消息:
<Connection>
<HConnection>1</HConnection>
</Return>
处理一个命令后,返回一条类似于下面的消息:
<Return>
120
</Return>
然而,这条消息也可能更复杂些,例如:
<Return>
Michaels,Rich,1200,10962 Acacia St
King,Mary,98012,11128 Maryland Ave
</Return>
它还有可能包含一条错误消息,例如:
<Return>
SQL Error 101 Table does not exist.
</Return>
全站资源
- 微软官方入门教程19:轻松掌握Vista系统的快
- 微软2008大冲击,预借Vista SP1力促Vista市
- 在收件箱中获得 Windows Vista 的最新更新
- 微软官方Vista入门教程全集19篇(Vista学院
- Windows Vista 的成功将势不可挡
- 快快抛弃Vista,拥抱XP SP3!你觉得呢?
- 浅谈Vista系统关闭虚拟内存与使用内存盘加速
- 嘿嘿,按下键盘上面的三个键,马上让你的Vi
- Windows Vista的盗版率只有Windows XP的一半
- 3DMark和PCMark Vantage新版将只支持Vista系
阅读排行
- 利用套接字机制实现Flash与数据库连接
- FLASH9.0新功能视频体验
- [视频]Flash 9 Alpha体验:软件安装
- Flash8绘制秋之落叶
- Flash制作书法动画
- Flash互动电子地图制作手册——入门实例
- 随心所欲 玩转Flash视频——FLV
- [视频]Flash 9 Alpha体验:播放器
- 制作温馨浪漫Flash情人卡
- Flash软件菜单中英文对照表
最新技术文档
- Flash制作交互动画:星座查询器
- Flash制作简单光晕变幻动画特效
- Flash实例:花丛中的小蜜蜂
- Flash创意特效:美 丽 星 空
- Flash创意特效:时 光 如 梭
- Flash创意特效:文本的光线效果
- Flash创意特效:流 星 雨
- Flash创意特效:飞 越 星 空
- Flash创意特效:清风不识字
- Flash创意特效:放 大 镜
专题教程
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
- Picasa中文版_Picasa教程 专题:清除流氓软件
- Firefox专题 seo搜索引擎优化专区
- 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏

