tin tức

How to Use Flash with PHP

22/02/2012 - Xem: 1431

Đây là bài viết chuẩn bị cho topic cùng tên trong PHPDAY .

Có rất nhiều cách giúp Flash client và PHP có thể giao tiếp được với nhau .

Về nguyên tắc flash client có thể sử dụng giao thức TCP/IP  ( và mới đây là Peer-to-Peer )  . Tuy nhiên thông dụng nhất vẫn là qua HTTP . Như vậy mọi mọi kết nối HTTP đều có thể dùng flash để giao tiếp ngon lành :D .

1. Dùng plain text

Tôi sẽ cố gắng load nội dung một file text trên i-php.net ( url của file : http://i-php.net/phpday/example.txt)

Ở đây  tôi minh họa bằng action script 3

var request:URLRequest = new URLRequest(“http://i-php.net/phpday/example.txt”);
var loader:URLLoader = new URLLoader(request);

// Handler when Loader complete
loader.addEventListener(Event.COMPLETE, completeHandler);

function completeHandler(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
trace(“loaded content: ” + loader.data);
}

// output  loaded content: Hello Flash client

Tất nhiên là flash client chẳng quan tâm đến file plain text ( ở đây là http://i-php.net/phpday/example.txt) là file tĩnh hay output của một server side process – server side script cả . Bạn có thể thay thế bằng việc gọi tới một file php script bằng cách thay URL .

var request:URLRequest = new URLRequest(“http://i-php.net/about/”);

Như vậy đối với flash việc đọc một file trên http server là dễ dàng . Từ việc đọc được một text file ta có thể dùng nhiều cách để giao tiếp với server ( load variable , Json, XML-RPC, SOAP , REST , …)

2. Dùng load variable

Dùng kỹ thuật này đề load các dữ liệu có định dạng name=value .

Ở actionscript 2 thì chỉ cần gọi hàm loadVariables
Ở actionscript 3 ta sửa đoạn code trên .
var request:URLRequest = new URLRequest("http://i-php.net/phpday/loadme.php");
var loader:URLLoader = new URLLoader(request);
// format result as VARIABLES
loader.dataFormat = URLLoaderDataFormat.VARIABLES

// Handler when Loader complete
loader.addEventListener(Event.COMPLETE, completeHandler);

function completeHandler(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);

if(loader.data is URLVariables)
{
trace(loader.data.user+”:”+loader.data.message);

}
}

File loadme.php chỉ đơn giản là echo ra nội dung :

echo 'message=Hello&user=system';
?>

Như vậy loadvar thực chất là định dạng nội dung theo định dang name=value pairs .

Với những dữ liệu đơn giản thì chỉ cần các cách 1 và 2 là đủ . Tuy nhiên với các dạng dữ liệu phức tạp như object hay Array thì cần những phương pháp serialization . Vậy serialization là gì và tại sao phải serialization ?

Trong các ứng dụng client-server ta muốn send các object qua mạng , mà bản thân các giao thức mạng ( tầng thấp ) đều không hiểu object là gì hết nó chỉ hiểu các bit ( 1001100111 … ) hoặc cao cấp cỡ HTTP cũng chỉ hiểu text và text . Nên chúng ta cần đưa các object về các dạng nhị phân hoặc text , truyền chúng qua mạng rồi về đến client sẽ dựng lại thành các object . Công việc như vậy gọi là serialization và deserialization .

Như vậy mỗi phương pháp serialization – deserialization khác nhau sẽ tạo ra một giao thức khác nhau SOAP,XML-RPC dùng XML , Json,Yaml dùng các nested text block ,…

Các Text based serialization như SOAP,XML-RPC , Json,Yaml tôi sẽ không đi sâu trong bài viết này .
Mà chỉ chỉ ra nhược điểm lớn nhất của chúng là vấn đề tốc độ truyền tải sẽ rất chậm .
Chậm vì các xml tag của SOAP,XML-RPC vừa thừa, vừa tốn thời gian serialization – deserialization.

Chính vì nhu cầu cần có giao thức có tốc độ truyền và serialization – deserialization nhanh hơn , và tốt hơn cả là binary thay vì text base nên với mỗi ngôn ngữ – công nghệ có các giải pháp khác nhau .
Như Java có RMI
Như .Net có .Net remoting
Python có RPyC
Flash có AMF

Vậy AMF là công nghệ RPC giúp client là Flash/AIR player giao tiếp với server .
Server của AMF có thể là :

Java – BlazeDS, RED 5, Cinnamon, OpenAMF, Pimento, Granite
.NET – WebORB, FluorineFx, AMF.NET
PHP – AMFPHP, SabreAMF, WebORB
Python – PyAMF, Flashticle, amfast, Plasma
Perl – AMF::Perl
Ruby – RubyAMF, WebORB

Nếu kết hợp với các framework phía server thì có các thư viện

Ruby on Rails – RubyAMF
Zend framework – Zend_AMF
OSGi framework – AMF3 for OSGi
Django – Django AMF
CakePHP – CakeAMFPHP

3. PHPAMF .
Như vậy PHPAMF chẳng qua chỉ là một thư viện giúp flash client có thể gửi và nhận dữ liệu với server side là php .
PHPAMF có một số đặc điểm
…. ( lười list)
Cụ thể các công việc mà PHPAMF sẽ làm khi nhận được flash client yêu cầu :

* Deserializes the request
* Finds the corresponding remote class
* Instantiates the class
* Performs security checks
* Calls the remote method using the specified arguments
* Serializes the returned data
( Lười dịch -> cần sơ đồ )

4. Cài đặt và Demo .
Only demo , nothing here :D


(i-php.net)

Liên kết

Tin được quan tâm nhất

Quản cáo