สำหรับการใช้งานคิวไฟล์เองก็ไม่ยุ่งยาก เช่นหากต้องการเพิ่มข้อมูลเข้าไปในคิวไฟล์ก็ใช้คำสั่ง enqueue() หากต้องการดึงข้อมูลออกจากคิวไฟล์ก็แค่ใช้คำสั่ง dequeue() และหากต้องการให้คิวไฟล์สามารถจัดเก็บข้อมูลในเท็กซ์ไฟล์ก็ใช้คำสั่ง save() นับว่าการใช้งานสามารถนำไปประยุกต์ใช้งานได้อย่างมากมาย
สำหรับข้อเสียที่ผู้เขียนพบเจอของการใช้งานแบบคิวไฟล์นี้ก็คือ ข้อมูลในไฟล์ที่ถูกเก็บจะปนกัน หากมีหลาย ๆ เซสชั่นดำเนินการจัดเก็บไฟล์พร้อม ๆ กัน เนื่องด้วยกระบวนการจัดเก็บไฟล์เองไม่ได้ป้องกันปัญหานี้ไว้ ซึ่งปัญหานี้หากใช้งานในระบบใหญ่ ๆ ก็ไม่สามารถนำไปใช้งานได้ เพราะจะเกิดการแข้งขันการจัดเก็บข้อมูลตลอดเวลา การใช้เทคนิคคิวไฟล์นี้ แนะนำให้เป็นศึกษาหาความรู้ความเข้าใจเบื้องต้นก่อนจะนำไปประยุกต์ใข้ด้วยเครื่องมืออื่น ๆ ต่อไป
ขั้นตอนการสร้างคิวไฟล์แบบเท็กซ์ไฟล์แบบง่ายโดยใช้โปรแกรม php
ขั้นตอนที่ 1 ในการสร้างการป้อนข้อมูลเข้าคิวไฟล์ ผู้เขียนแนะนำให้ใช้โค๊ดอย่างง่าย ๆ ที่แปะไว้ให้ข้างล่างนี้ โดย include เป็นการเรียกใช้งานคลาสคิวไฟล์ คำสั่ง new เป็นการสร้างออปเจคขึ้นมาใหม่ เมทธอด enqueue เป็นการป้อนข้อมูลเข้าคิวไฟล์ จากนั้นทำการ save ลงในเท็กซ์ไฟล์
<?php include "queue/TitleManager.php"; $qt = new TitleManager(); $qt->enqueue($msgs); $qt->save(); ?>
ขั้นตอนที่ 2 เป็นการสร้างโค๊ดสำหรับดึงข้อมูลออกจากคิวไฟล์ include เป็นการเรียกใช้งานคลาสคิวไฟล์ คำสั่ง new เป็นการสร้างออปเจคขึ้นใหม่ ส่วนเมทธอด dequeue เป็นการอ่านค่าจากคิวไฟล์ในตำแหน่งที่พอยเตอร์อยู่ และเมทธอด save เป็นการบันทึกข้อมูลลงเท็กซ์ไฟล์
<?php include "queue/TitleManager.php"; qt = new TitleManager(); $msg = $qt->dequeue(); $qt->save(); ?>
ขั้นตอนที่ 3 เป็นการสร้างไฟล์สำหรับคลาสคิวไฟล์ ให้ตั้งชื่อว่า TitleManager.php
<?php // Title Manager class (essentially a queue) that uses a simple text file for storage class TitleManager { private $filename = "/tmp/gpsmessages.txt"; private $queueLimit = 10000; private $titles; // Upon creation, load up our titles from the file public function __construct() { $this->titles = array(); $this->loadTitles(); } private function loadTitles() { if (file_exists($this->filename)) { $this->titles = file($this->filename, FILE_SKIP_EMPTY_LINES); } } // Add a title to the queue and if we are at our limit, drop one off the end. public function enqueue($strTitle) { if (!empty($strTitle)) { array_unshift($this->titles, $strTitle . "\n"); if (count($this->titles) > $this->queueLimit) { $this->dequeue(); } } } // Remove a title item from the end of our list public function dequeue() { if (count($this->titles) > 0) { return trim(array_pop($this->titles)); } return ""; } // Save the contents of our array back to the file. public function save() { if (file_put_contents($this->filename, $this->titles)) { return true; } return false; } // Check if an item is already in our list. // Note: We could have also used in_array here instead of a loop. public function isTitlePresent($strTitle = "") { if (!empty($strTitle)) { foreach ($this->titles as $title) { $trimmedTitle = trim($title); $strTitle = trim($strTitle); if (strtolower($strTitle) == strtolower($trimmedTitle)) { return true; } } return false; } return -1; } // Mainly a debug function to print our values to screen. public function printValues() { foreach ($this->titles as $value) { echo "$value<br/>"; } } } ?>
สรุปว่า ด้วยโค๊ดง่าย ๆ เพียงแค่นี้ เราก็สามารถนำไปประยุกต์ใช้งานการใช้คิวไฟล์เบื้องต้น ได้อย่างไม่ยาก ตามที่ผู้เขียนแนะนำไว้ตั้งแต่ต้นว่าไม่เหมาะกับการนำไปใช้งานจริงในระบบที่มีการบันทึกคิวไฟล์หลายๆเซสชั่นพร้อมกันเพราะจะเกิดการบันทึกไฟล์ที่แข่งกันหรือปนกันระหว่างเซสชั่นต่าง ๆ นั่นเอง
ส่วนวิธีการที่ดีกว่าการใช้คิวแบบเท็กซ์ไฟล์ ผู้เขียนได้ทดลองใช้งานอยู่ในปัจจุบันก็คือ "beanstalk" นั่นเองจัดว่าเป็นโปรแกรมจัดการคิวแบบง่าย ๆ ที่มีประสิทธิภาพสูง ซึ่งผู้เขียนจะได้นำเสนอบทความการใช้งาน beanstalk กันอีกครั้งหนึ่งในภายภาคหน้า เนื้อหาดี ๆเหล่านี้จะสำเร็จลุล่วงไปไม่ได้เลย หากไม่ได้รับการสนับสนุนจาก บจก.ไทย พรอสเพอรัส ไอที ผู้นำด้านการให้บริการระบบจีพีเอสติดตามรถยนต์ อันดับหนึ่งของประเทศไทย ดำเนินการด้วยทีมงานวิศวกร ช่วยให้รถยนต์ของเราไม่พลาดการเชื่อมต่อ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น