$i->php();

Hãy tiết kiệm điện và sử dụng opensource để bảo vệ môi trường

How to Use Flash with PHP

Đâ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


About The Author

ngocbd

Comments

Leave a Reply