Flash Remoting

Posted by PunNeng, Mon Nov 14 01:35:00 UTC 2005

Flash remoting คืออะไร

หลายๆ คนคงสงสัยอยู่ ว่ามันคืออะไร ใช้งานยังไง มีประโยชน์อย่างไร Flash remoting เป็น client/server framework ที่ถูกออกแบบมาเพื่อใช้ส่งผ่านข้อมูลระหว่าง server กะ flash client โดยใช้ AMF ซึ่งเป็นรูปแบบในการส่งผ่านโดยมีฐานมาจาก SOAP

Flash Remoting ช่วยอะไรได้

นั่นสิ มันช่วยอะไรได้ มาลองนึกเล่นๆ ดู ถ้าจะรับส่งข้อมูลระหว่าง Flash(client) กับ server นะ ง่ายๆ คงต้องทำเป็น XML ละ แล้วเขียนให้ Flash ไปดึงค่าออกมา แต่ถ้าต้องการต่อ Database ละ เราคงต้องติดต่อกับ Server-side script สักตัวนะ เอาเป็น PHP ให้ PHP ต่อกับ Database แล้วก้อไป query มันขึ้นมา เขียนใส่ XML อันยืดยาว แล้วค่อยส่งกลับมาที่ Flash โดยใช้ XML Parser แกะมันออกมา1 ยืดยาวมากมาย ทำไมเราไม่ส่งไปตรงๆ โดยใช้ Flash Remoting ละ

มาเจาะ Flash Remoting กันต่อ

Flash Remoting เป็นชุดพัฒนาที่นำเอา server gateway, component, actionscript class และ debugger เข้ามา ในหน้า Flash คุณจะต้องเขียน actionscript ในการคุมการถอดรหัสและเข้ารหัสของข้อมูล ต้องมีทางผ่านสำหรับจะส่งไปยัง Server ด้วย เพราะไม่ได้ส่งกันแบบธรรมดาๆ มันจะส่งผ่านกันในรูปแบบ AMF ซึ่งจะส่งกันเป็น binary format เหมือนๆ กับ SOAP

แล้วทำไมจะต้องเป็น Remoting ด้วย

มันจะส่งผ่านข้อมูลที่ซับซ้อนได้ จำพวก Object หรือ Array และก้อพวกตัวแปรทั่วๆไปได้ ถ้าเราเกิดมีการ query ข้อมูลขึ้นมาสักชุดนะ มันจะรับส่งกันเป็น RecordSet Class เลย เช่น

return mysql_query("SELECT * FROM db");

แล้วถ้ามันมี RecordSet Class มันก้อทำเป็น Datagrid ได้ดิ แน่นอนละ ใน Flash ย่อมมี Datagrid รองรับอยู่แล้ว code ตัวอย่าง

function remoteFunctionReturn(re:ResultEvent){
    _root.myDataGrid.dataProvider = re.result;
}

แต่การส่งผ่านข้อมูลกันแบบนี้ มันย่อมมีปัญหาแน่ๆ ซึ่งเราจะไม่เห็นจริงๆ หรอก ว่ามันโยนอะไร ไปๆ มาๆ มันจะก่อให้การความยุ่งยากในการ debug แต่ Flash Remoting จะมีตัว NetConnection Debugger ให้ ซึ่งมันจะช่วยให้เราเห็น ว่าเราโยนอะไร ไปๆ มาๆ

จริงๆ แล้ว ในตัว Flash เองก้อยังมี component สำหรับใช้ควบคุม XML กับ SOAP ซึ่งจะทำให้ชีวิตเราสบายขึ้นยอะ แต่ยังไงซะ มันก้อบดบังรัศมีของ Remoting ไม่ได้ ตัว Flash Remoting จะใช้ network traffic น้อยกว่า soap ถึง 75% เพราะว่า AMF เป็น binary format เวลาส่ง จะส่งเป็นเซ็ตของ binary มันจะด่วนจี๋ไปรษณีย์จ๋ามากเลย และตั้งแต่ที่มีการเอา format นี้มาใช้ใน Flash Player, ตัว parsing และตัว encoding มันยังทำให้มีความเร็วมากกว่า Web Services connector อีกด้วย

จุดได้เปรียบในอนาคต

ถ้างานของเรามีข้อมูลที่ง่ายๆ ไม่ซับซ้อน คงไม่ต้องอาศัย Flash Remoting ช่วยมากมายนัก หันไปใช้พวก loadVariable หรือ LoadVars หรือ XML ดีกว่า จะว่ากันจริงๆ แล้ว เราไม่สามารถส่ง string จาก Flash ไป PHP หรือ PHP มา Flash ได้โดยตรง เราจะต้องส่ง URL encoded string แทน เช่น company=Macromedia&address=600+Townsend&city=San+Francisco แต่ถ้าเป็น Object ล่ะ หรือเป็น Array ละ หรือเป็น DataSet ละ จะทำยังไง คงต้องมานั่งเขียน serialization/deserialization กันหูตาแหก แต่ถ้าใช้ Class ของ Remoting ละ จะง่ายหว่าไหม

ตัว Flash Player จะรองรับ Remoting อยู่แล้ว โดยใช้ C++ เป็นตัวสร้าง ใช้ v2 component เป็นตัวต่อ RecordSet โดยใช้ code เพียงไม่กี่บรรทัด จากนั้นมาดูฝั่ง business logic เรามาต่อกับ PHP โดยผ่าน AMFPHP หรือ JAVA โดยผ่าน OpenAMF หรือจะเป็น ColdFusion ที่มันรองรับ Remoting อยู่แล้ว น่าจะดีกว่านะ ชีวิตเราจะง่ายขึ้นเยอะ มาดูข้อดีของ Remoting แยกเป็นข้อๆ เลยดีกั่ว

  • เร็วกว่า XML หรือ LoadVars แน่นอน
  • ไม่ต้องมานั่งเสียเวลาจัดรูปแบบในการส่งเหมือนกับ XML หรือ LoadVars
  • ขนาดเล็กสุดๆ
  • รองรับ AS 2.0
  • ใช้ RecordSet จัดการกับ Data ไมต้องไปเสียเวลาพิมพ์ code ให้มากความ
  • รองรับ DataType ทุกอย่าง
  • มี NetConnection Debugger คอยช่วย debug
  • free authentication
  • ใช่ต่อ Web Services ก้อได้
  • เป็นทางเดียวที่จะต่อ FlashComm ไปหา Application Server ที่ไม่รองรับ FlashComm ได้

มะ มามะ มาลองใช้กันดู

(1) จริงๆ แล้ว Flash มี loadVariables และ LoadVars Class อยู่แล้ว แต่การจะ Query ข้อมูลจาก Database นั้น เราไม่รู้ว่ามีข้อมูลเยอะขนาดไหน ทางทีดี จึงควรส่งมาเป็นในลักษณะ Object แต่ถ้าเราไม่ใช้ Flash Remoting เราคงต้องมานั่งไล่เขียน XML กันบานเบอะ

แก้ไขล่าสุด วันที่ 14 มิถุนายน 2550 เวลา 4.45 น.

ข้อมูลจาก
link ตายไปแล้ว =='

Filed Under: General | Tags: flash flash remoting

Comments

  1. dogdoy 11.10.07 / 01AM

    เจ๋งไปเลยครับ อธิบายได้เข้าใจง่ายมากๆ

  2. nhom 01.17.08 / 13PM

    เจ๋งสุดๆๆ แล้วมีวิธี หรือตัวอย่างใหมครับ ส่งให้ทีครับ email:nhom.nrm@gmail.com

  3. ssss 03.26.08 / 19PM

    <xmp>ssss

  4. aaaaa</span> <span class="date">03.26.08 / 20PM</span> </cite> <div class="content"> <p>sssssssss</p> </div> <div class="clear"></div> </li> </ol> <div id="comment-form"> <form id="comment-form" method="post" action="/2005/11/13/flash-remoting/comments#comment-form"> <h3 class="formhead">Have your say</h3> <p>A name is required. You may use HTML in your comments.</p> <input type="text" id="comment_author" name="comment[author]" value="" /> <label class="text" for="comment_author">Name (Required)</label><br /> <input type="text" id="comment_soyjjncmhaju" name="comment[soyjjncmhaju]" value="" /> <label for="soyjjncmhaju">Email (Required and will not be publish)</label><br /> <input type="text" id="comment_author_url" name="comment[author_url]" value="" /> <label class="text" for="comment_author_url">Website</label><br /> <p><textarea id="comment_body" name="comment[body]"></textarea></p> <p id="comment-email" style="display:none"> If you can read this, you don't use a typical webbrowser that plays nice with CSS. <br /> <strong>Please do not fill in anything here!</strong><br /> <input type="text" id="comment_author_email" name="comment[author_email]" value="" /> </p> <div class="formactions"> <input type="submit" value="Post comment" class="submit" /> </div> </form> </div> </div> </div> <div id="subcol"> <div class="bt"><div></div></div> <div id="sc2"> <div class="sidebar-node"> <h3>About this site</h3> <div class="text">Worst view in IE.</div> </div> <div class="sidebar-node"> <h3>Pages</h3> <ul> <li><a href="/about" title="About">About</a></li><li><a href="/links" title="Links">Links</a></li> </ul> </div> <div class="sidebar-node"> <h3>Categories</h3> <ul class="counts"> <li><a href="/" title="Home">Home</a></li> <li><a href="/general" title="General">General</a></li> <li><a href="/merb" title="Merb">Merb</a></li> <li><a href="/ruby" title="Ruby">Ruby</a></li> <li><a href="/ruby-on-rails" title="Ruby on Rails">Ruby on Rails</a></li> </ul> </div> <div class="sidebar-node"> <h3>Top Tags</h3> <ul> <li><a title='howto' href='/tags/howto'>howto</a> (52)</li><li><a title='ruby on rails' href='/tags/ruby-on-rails'>ruby on rails</a> (46)</li><li><a title='ruby' href='/tags/ruby'>ruby</a> (17)</li><li><a title='flash' href='/tags/flash'>flash</a> (16)</li><li><a title='php' href='/tags/php'>php</a> (15)</li><li><a title='installing' href='/tags/installing'>installing</a> (10)</li><li><a title='javascript' href='/tags/javascript'>javascript</a> (10)</li><li><a title='framework' href='/tags/framework'>framework</a> (9)</li><li><a title='ubuntu' href='/tags/ubuntu'>ubuntu</a> (9)</li><li><a title='database' href='/tags/database'>database</a> (8)</li> <li><a href="/tags" title="Tags">and more...</a></li> </ul> </div> <div class="sidebar-node"> <h3>More</h3> <ul> <li><a href="/archives" title="Archives">Archives</a></li> <li><a href="http://feeds.feedburner.com/punneng" title="Feed">Feed</a></li> <li><a href="http://www.codegent.com/wearehiring" title="codegent: we're hiring (click through to see current positions)" target="_blank">Need a job?</a></li> </ul> </div> <div style="text-align:center;"> <a href="http://www.codegent.com/wearehiring" title="codegent: we're hiring (click through to see current positions)" target="_blank"><img src="http://www.codegent.com/images/banners/codegent_wearehiring_banner_468x60.png" width="196" height="25" alt="codegent: we're hiring" border="0" /></a> </div> </div> </div> </div> <div id="subfoot"> <div class="bb"> <div></div> </div> </div> <div id="footer"> <p> <a href="http://validator.w3.org/check/referer" title="Validates this page">XHTML</a>, <a href="http://jigsaw.w3.org/css-validator/check/referer?warning=no&amp;profile=css2" title="Validates the CSS on this page.">CSS</a>. Template by <a href="http://www.soniciq.com" title="SonicIQ - Website Development">SonicIQ</a>. Ported to Mephisto by <a href="http://www.cvreg.org" title="Central Virginia Ruby User's Group">CVREG</a>.<br /> Site powered by <a href="http://mephistoblog.com" title="Mephisto—The best blogging system ever">Mephisto</a>. </p> </div> </div> </div> </div> </body>