blog.Ring.idv.tw

LoadVars vs. Flash Remoting

LoadVars vs. Flash Remoting

從標題「LoadVars vs. Flash Remoting」來看,我想這絕對夠直覺本文想要表達的是什麼~沒錯~ Flash可以藉由著許多種方式和後端程式溝通,尤其是採用loadVariables、LoadVars這種純文字(Plain Text)方式的傳輸最便利使用,然而它真的是純文字嗎?而Flash Remoting真的就是用binary format來傳輸嗎?

本文將藉由著Ethereal封包捕捉工具來協助我們探討底層的傳輸格式~

LoadVars - Plain Text

我們寫一個簡單的小範例來做測試~

Flash ActionScript

var data_lv:LoadVars = new LoadVars();
data_lv.name = "Flash";
data_lv.sendAndLoad("http://localhost/LoadVars.php",data_lv,"POST");
data_lv.onLoad = function(success)
{
	if(success)
	{
		trace("Loaded!");
		trace(this.value);
	}else{
		trace("Failed!");
	}
}

PHP (LoadVars.php)

<?php
	echo "&value=Hello! " . $_POST['name'];
?>

Ethereal捕捉請求封包(Plain Text)

Ethereal捕捉回應封包(Plain Text)

從上述所捕捉的封包很明確的,在請求時送出「name=Flash」,而在接收時則為「&value=Hello! Flash」,兩者的確都是採用純文字的方式來傳輸~

Flash Remoting - AMF3

Flash ActionScript

var myService = new NetConnection()
myService.connect("http://localhost/amfphp/gateway.php");
var responder = new Responder(onResult, onFault);
myService.call("Hello.sayHello", responder,"Java");
function onResult(result)
{
	trace(result);
}
function onFault(f:Event )
{
	trace("There was a problem: " + f.description);
}
stop();

PHP (Hello.php)

<?php
class Hello
{
	function sayHello($name)
	{
		return "Hello! $name";
	}
}
?>

Ethereal捕捉請求封包(AMF)

Ethereal捕捉回應封包(AMF)

(反白區就是請求與回應的位元組)

所以從上述所捕捉的封包來看~ Flash Remoting的確是採用binary format來傳輸,然而這只是一個簡單的小範例,所以尚無法將Remoting的優點發揮出來~

而筆者比較感興趣的地方就在於請求封包中的前二個位元組分別為「0x00、0x03」,其實這就是代表著此傳輸的AMF版本為AMF3,而緊接著一連串的位元組尚需要時間去做更深入的剖析,筆者有時間再為大家來分享~

2007-12-11 18:06:40

1 comments on "LoadVars vs. Flash Remoting"

  1. 1. A STUDENT 說:

    你好,我們正在用FLASH做學校的專題,想請問你一些問題:

    如果我們須要使用JAVA的類別那Action Script要如何CALL到JAVA呢??

    謝謝你的回答唷!!!

    2011-05-10 14:18:34

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment