gzip ระหว่าง as3 + php by

30
Nov
0

อันนี้ก็มาจากการพยายามลดขนาดข้อมูลที่ต้องส่งไปมาระหว่าง Php กับ Flash ซึ่งเป็น Text ล้วนๆ ซึ่งก็ใหญ่ไม่ใช่เล่นเหมือนกัน

เลยพยายามลองใช้ gzip ที่มีติดอยู่กับ php เป็น default อยู่แล้ว

ประเด็นคือ gzip ของ php มี function เยอะมากมาย ประมาณ 3-4 แบบได้

ส่วน as3 ก็ไม่รู้ว่ามีหรือเปล่า ต้องหาอะไรเพิ่มมั้ย ก็เลยต้องศึกษาเพิ่มกันหน่อย

หลังจากวิจัยมาเกือบวัน ก็สรุปได้ผลตามนี้

PHP

หลังจากลองผิดลองถูกอยู่ซักพักก็ได้ โค้ดมาประมาณนี้

$log_zip = base64_encode(gzcompress(json_encode($log),5));

- แปลง Object เป็น Json ก่อนเพื่อความสะดวกในการใช้งาน

- gzip ด้วย gzcompress ระดับเท่าไหรก็แล้วแต่ เท่าที่ลองประมาณ 5 กำลังดี ทั้งเวลาและขนาด

- สุดท้ายเข้ารหัสเป็น Base64 เพื่อจะได้ส่งทาง Flashvar ได้

โดยส่งไปทาง FlashVars แบบนี้

<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″

width=”600″ height=”450″

codebase=”http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab” style=”visibility: visible;”>

<param name=”movie” value=”assets/flash/battle.swf” />

<param name=”quality” value=”high” />

<param name=”bgcolor” value=”#869ca7″ />

<param name=”wmode” value=”transparent” />

<param name=”allowScriptAccess” value=”sameDomain” />

<param name=”flashVars” value=”&log=<?=$log_zip?>” />

<embed src=”assets/flash/battle.swf” quality=”high” bgcolor=”#869ca7″ wmode=”transparent”

width=”600″ height=”450″ name=”flashBattle” align=”middle”

play=”true”

loop=”false”

quality=”high”battle_result

allowScriptAccess=”sameDomain”

flashVars=”&log=<?=$log_zip?>

type=”application/x-shockwave-flash”

pluginspage=”http://www.adobe.com/go/getflashplayer”>

</embed>

</object>

- ตัวแปล log_zip ส่งไปทาง FlashVars

AS3

หลังจากโง่งมหาอยู่นาน ปรากฏว่ามันมีอยู่แล้ว แต่ search แล้วดันเจอแต่ library เก่าๆ!

โค้ดก็ประมาณนี้หล่ะ เธอว์

var log_zip:String = root.loaderInfo.parameters.log;

var b64:Base64Decoder = new Base64Decoder();

log_zip = log_zip.replace(/ /g,”+”);

b64.decode(log_zip);

var ba:ByteArray = b64.flush();

ba.uncompress();

var log_text:String = ba.toString();

log = new JSONDecoder(log_text).getValue();

- ต้องมี Base64Decoder จาก as3lib ด้วย ไปหาโหลดเพิ่มเอา

- ที่เจ็บปวดคือส่งผ่าน FlashVar แล้วมันดันแปลง + เป็น space ให้ตามประสา urlencode! หาเป็นชั่วโมง!

- สุดท้ายก็แกะ Json ด้วย JSONDecoder (as3lib เหมือนกัน)

ผลจากการ gZip

ขนาดลดลงอย่างเห็นได้ชัดทีเดียว

เดิม = 8167 ตัวอักษร

gzip = 524 ตัวอักษร

ประหยัดไปเกือบๆ 20 เท่าทีเดียวเชียว

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน