【问题标题】:ways of client server communications客户端服务器通信方式
【发布时间】:2011-03-26 19:56:04
【问题描述】:

向/从服务器端数据源发送/加载数据有多少种可能的方式以及使用每种方式的条件是什么。

【问题讨论】:

  • 你的意思是协议吗?或者数据是如何格式化的?有很多可能性....我会让其他人经历所有这些,哈哈
  • 嗯,有很多方法。除非你的意思协议。也许您应该更具体地说明您要做什么?
  • “服务器端数据源”是什么意思?您想从数据库中加载数据吗?您要加载图像或流式传输视频/声音吗?你应该更具体的家伙。

标签: flash actionscript-3 actionscript-2


【解决方案1】:

对于简单的沟通,常见的方式有以下三种:

LoadVar (AS2) / URLLoader (AS3)

这是 Flash 历史上第一个使用 HTTP 从服务器检索数据的方法。

例如:

//params.txt is a local file that includes: firstName=Tom&lastName=Jones
var lbl:TextField = new TextField();
var urlRequest:URLRequest = new URLRequest("params.txt");
var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);
urlLoader.load(urlRequest);

function urlLoader_complete(evt:Event):void {
    lbl.text = urlLoader.data.lastName + "," + urlLoader.data.firstName;
    addChild(lbl);
}

从 Flash 中读取非常快,但在服务器端进行读取并不那么简单,因为语法确实特定于 Flash。在处理复杂对象时它变得非常糟糕。 如果您必须向服务器发送一些数据,您可以将它们作为 GET 参数放在 URL 中,或者使用与 URLLoader.data 非常相似的URLVariables

XML

易于人类阅读,许多库存在于服务器端。在 AS3 中,E4X 语法使其比以前的 AS2 更容易解析。无论如何,它对于手动输入的数据很有用,但对于动态数据来说并不那么容易使用。主要骗局仍然存在

这是一种极大的时间浪费;很多资源都浪费在搞清楚要使用什么模式、在服务器和客户端上实现代码以及调试上。所有这些都是为了在服务器上构建一些东西,然后在客户端立即销毁。

这句话来自AMFPHP,这是……第三种方式!

AMFPHP(现在是 Zend AMF)

这是通过 Flash 与服务器通信的最佳方式(在简单方式中)。通信是通过网络服务进行的。 Flash 端的实现本身就存在(查看NetConnection)。在服务器端,AMF [无论您在服务器端使用什么语言] 都将允许您使用键入的对象并将它们直接发送到闪存,而无需任何手动转换。您也可以从 Flash 发送一些数据而不对其进行转换,您会在服务器上找到一个类型化的对象。这是相当理想的。


总结一下:如果你有 3 个变量(对于非常小的项目),URLLoader 会很好。 XML 非常适用于拥有大量静态数据(配置文件)的情况。当您处理注入动态数据(来自数据库)的服务器时,AMF 是理想的选择。

【讨论】:

    【解决方案2】:

    HTTP: 这就是 URLLoader 为您提供的。您可以向网络服务器发出 HTTP 请求,并取回结果。请求可以像获取文本文件一样简单,也可以像调用服务器端脚本(PHP、ASP、Python 等)一样复杂,然后取回您可以通过 HTTP 发送的任何内容。

    XMLSocket:您可以使用 XMLSocket 类在您选择的端口上与服务器建立直接 TCP/IP 连接,并通过持久连接直接与 XML 通信。

    Socket: 套接字类的工作方式与 XMLSocket 相同,但用于 TCP/IP 上的原始二进制数据。 Socket 类为您提供了许多帮助函数,用于将数据解释为常见数据类型,以及将原始数据作为 ByteArray 获取的能力。你可以通过这种方式发送任何你想要的东西。

    Flash 目前不支持的(据我所知)是对 UDP 的完整内置支持。这通常用于低延迟 P2P 游戏,我听说它正在开发中,并且在 Flash Player 10 测试版中得到部分支持,但我还没有研究过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-26
      • 2011-09-05
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      相关资源
      最近更新 更多