利用套接字机制实现Flash和数据库连接

2008-04-02 11:02:03来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  无论对于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构建一个完整功能的数据库查询工具,但是在本示例中所用的方法能够为实现任何特定的需要而加以定制。

  
利用套接字机制实现Flash和数据库连接

  图1.连接GUI:该图像显示一个在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前端。他还将把认证信息和连接数字(一个"句柄")添加到一内部的连接集合上。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: Excel转成Flash

下一篇: 一些动作的简单解析5:起身