Đâ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 .
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
(i-php.net)