Short Polling เป็นเทคนิคการสื่อสารระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ โดยที่ไคลเอ็นต์ส่งคำขอ HTTP ตามช่วงเวลาที่กำหนดเพื่อรับข้อมูลที่อัปเดต เซิร์ฟเวอร์ประมวลผลแต่ละคำขอทันที โดยส่งคืนสถานะปัจจุบันแม้ว่าจะไม่มีการเปลี่ยนแปลงใด ๆ ตามข้อมูลของ Amazon Web Services, 2024 Short Polling เป็นวิธีการโพลล์ที่ง่ายที่สุดในการนำไปใช้ แต่มีประสิทธิภาพน้อยที่สุด ทำให้เกิดภาระเกินจำเป็นบนเซิร์ฟเวอร์และเครือข่าย
ประเด็นสำคัญ
Short Polling เป็นรูปแบบการสื่อสารที่ไคลเอ็นต์ส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์เป็นระยะตามช่วงเวลาที่กำหนดไว้ล่วงหน้า และเซิร์ฟเวอร์ประมวลผลแต่ละคำขอแบบซิงโครนัสและส่งคืนผลลัพธ์ทันที ช่วงเวลาโพลล์ถูกกำหนดที่ฝั่งไคลเอ็นต์โดยใช้ตัวจับเวลาและโดยทั่วไปจะอยู่ระหว่าง 1 ถึง 60 วินาที ขึ้นอยู่กับข้อกำหนดด้านความสดใหม่ของข้อมูล
Short Polling เป็นกลไกแรกตามลำดับเวลาสำหรับการจัดระเบียบการสื่อสารแบบเวลาจริงในเว็บแอปพลิเคชัน ในช่วงต้นทศวรรษ 2000 ก่อน XMLHttpRequest รุ่นที่สอง เว็บเพจใช้ <meta http-equiv="refresh"> หรือการโหลด iframe ซ้ำเป็นระยะเพื่ออัปเดตเนื้อหา ด้วยการถือกำเนิดของเทคโนโลยี AJAX (Asynchronous JavaScript and XML) ในปี 2005 Short Polling กลายเป็นแนวทางมาตรฐานสำหรับการอัปเดตข้อมูลโดยไม่ต้องโหลดหน้าใหม่ทั้งหมด
สถาปัตยกรรม Short Polling ประกอบด้วยสามองค์ประกอบ: ตัวจับเวลาของไคลเอ็นต์ คำขอ HTTP และตัวจัดการของเซิร์ฟเวอร์ ไคลเอ็นต์เริ่มตัวจับเวลาช่วง และทุกครั้งที่มันทำงาน คำขอ GET จะถูกส่งไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์สอบถามฐานข้อมูลหรือแหล่งอื่น สร้างการตอบสนอง และส่งคืนให้ไคลเอ็นต์ทันที ไคลเอ็นต์อัปเดตอินเทอร์เฟซและรอการทำงานครั้งถัดไปของตัวจับเวลา วัฏจักรนี้จะเกิดขึ้นซ้ำอย่างไม่มีที่สิ้นสุดตราบใดที่แอปพลิเคชันยังทำงานอยู่
ปัญหาหลักของ Short Polling คือคำขอเปล่าที่หลีกเลี่ยงไม่ได้ หากข้อมูลเปลี่ยนแปลงน้อยครั้ง คำขอส่วนใหญ่จะส่งคืนผลลัพธ์ "ไม่มีการเปลี่ยนแปลง" ทำให้สิ้นเปลืองแบนด์วิดท์เครือข่ายและเวลา CPU ในการประมวลผล ด้วยไคลเอ็นต์ 10,000 รายที่มีช่วงเวลาโพลล์ 5 วินาที เซิร์ฟเวอร์ได้รับคำขอ 2,000 รายการต่อวินาที — ซึ่งส่วนสำคัญไร้ประโยชน์หากความถี่ในการอัปเดตคือ 1 เหตุการณ์ต่อนาที
Short Polling ทำงานในวัฏจักรง่าย ๆ: ไคลเอ็นต์ตั้งตัวจับเวลาช่วงด้วยระยะเวลาที่กำหนด (เช่น 5000 ms) ทุกครั้งที่ตัวจับเวลาทำงาน ไคลเอ็นต์จะสร้างคำขอ HTTP GET ไปยังปลายทางของเซิร์ฟเวอร์ โดยปกติจะมีพารามิเตอร์การประทับเวลาของการอัปเดตล่าสุด เซิร์ฟเวอร์รับคำขอ ตรวจสอบข้อมูลใหม่หลังจากการประทับเวลาที่ระบุ และส่งคืนการตอบสนอง — ไม่ว่าจะเป็นข้อมูลใหม่หรือตัวบ่งชี้ว่าไม่มีการอัปเดต
พารามิเตอร์การกำหนดค่าที่สำคัญของ Short Polling คือช่วงเวลาโพลล์ ช่วงเวลาที่สั้นเกินไป (น้อยกว่า 3 วินาที) สร้างภาระสูงบนเซิร์ฟเวอร์และเครือข่าย ช่วงเวลาที่ยาวเกินไป (มากกว่า 30 วินาที) ลดความสดใหม่ของข้อมูล ช่วงเวลาที่เหมาะสมที่สุดขึ้นอยู่กับสถานการณ์: สำหรับแดชบอร์ดตรวจสอบ — 5–15 วินาที สำหรับฟีดข่าว — 30–60 วินาที สำหรับการแจ้งเตือนที่สำคัญ — 1–3 วินาที การเลือกช่วงเวลาเป็นการแลกเปลี่ยนระหว่างความสดใหม่ของข้อมูลและภาระของโครงสร้างพื้นฐาน
เพื่อลดภาระในช่วงเวลาว่าง จะใช้ช่วงเวลาแบบปรับตัว: หากคำขอที่ต่อเนื่องกันหลายรายการส่งคืนผลลัพธ์ว่าง ช่วงเวลาจะเพิ่มขึ้น (เช่น จาก 5 เป็น 15 วินาที) เมื่อมีข้อมูลใหม่ปรากฏขึ้น ช่วงเวลาจะถูกรีเซ็ตเป็นค่าต่ำสุด อัลกอริทึม exponential backoff สามารถลดจำนวนคำขอเปล่าได้ 3–5 เท่าในระหว่างการอัปเดตที่เกิดขึ้นน้อยครั้ง
มาดูการนำ Short Polling ไปใช้ฝั่งไคลเอ็นต์โดยใช้ setInterval และ Fetch API ฟังก์ชันรับ URL ปลายทางและช่วงเวลาโพลล์เป็นมิลลิวินาที
function startPolling(url, intervalMs) {
const lastTimestamp = new Date().toISOString();
const timerId = setInterval(async () => {
try {
const params = new URLSearchParams({
since: lastTimestamp
});
const response = await fetch(url + "?" + params);
const data = await response.json();
if (data.updates && data.updates.length > 0) {
renderUpdates(data.updates);
console.log("ได้รับแล้ว", data.updates.length, "updates");
}
} catch (error) {
console.error("การโพลล์ล้มเหลว:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) เพื่อหยุด
โค้ดสร้างช่วงเวลาโพลล์ 5 วินาทีและส่งการประทับเวลาของการอัปเดตล่าสุดไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์สามารถใช้พารามิเตอร์นี้เพื่อกรองข้อมูลและส่งคืนเฉพาะระเบียนใหม่ ลดปริมาณข้อมูลที่ส่ง ฟังก์ชันส่งคืนตัวระบุตัวจับเวลาเพื่อให้สามารถหยุดการโพลล์ได้
การนำไปใช้ฝั่งเซิร์ฟเวอร์สำหรับ Short Polling ง่ายมาก — มันเป็นปลายทาง REST ทั่วไปที่รับคำขอ GET และส่งคืนการตอบสนอง JSON พร้อมสถานะปัจจุบันหรือข้อมูลที่เปลี่ยนแปลงหลังจากการประทับเวลาที่ระบุ
const express = require("express");
const app = express();
let items = [];
app.get("/api/updates", (req, res) => {
const since = req.query.since;
const filtered = items.filter(item => item.timestamp > since);
res.json({ updates: filtered });
});
app.listen(3000);
เซิร์ฟเวอร์รับพารามิเตอร์ since และกรองระเบียนที่มีการประทับเวลาเกินค่าที่ระบุ วิธีการนี้ลดปริมาณข้อมูลในแต่ละการตอบสนอง โดยส่งคืนเฉพาะการเปลี่ยนแปลงเพิ่มเติม เมื่อไม่มีข้อมูลใหม่ เซิร์ฟเวอร์ส่งคืนอาร์เรย์ว่าง และไคลเอ็นต์ดำเนินการโพลล์ต่อตามกำหนดการ
Short Polling และ Long Polling แก้ปัญหาเดียวกัน — การส่งข้อมูลจากเซิร์ฟเวอร์ไปยังไคลเอ็นต์ — แต่แตกต่างกันอย่างสิ้นเชิงในด้านประสิทธิภาพ Short Polling ใช้ช่วงเวลาคำขอคงที่ สร้างภาระที่คาดการณ์ได้ ในขณะที่ Long Polling รักษาการเชื่อมต่อให้เปิดอยู่จนกว่าเหตุการณ์จะเกิดขึ้น ลดจำนวนการตอบสนองเปล่า
| เกณฑ์ | Short Polling | Long Polling |
|---|---|---|
| ความซับซ้อนในการนำไปใช้ | ต่ำ, REST มาตรฐาน | ปานกลาง, การประมวลผลแบบอะซิงโครนัส |
| ความหน่วงของการอัปเดต | คงที่, สูงสุด N วินาที | น้อยที่สุด, เมื่อเหตุการณ์เกิดขึ้น |
| จำนวนคำขอ | คงที่, N คำขอต่อนาที | ตามเหตุการณ์, โดยปกติน้อยกว่ามาก |
| ภาระเซิร์ฟเวอร์ | สูงเมื่อช่วงเวลาสั้น | การรักษาการเชื่อมต่อ, การประมวลผลแบบอะซิงโครนัส |
| ปริมาณการรับส่งข้อมูลเมื่อว่าง | สูงสุด, แต่ละคำขอมีส่วนหัว | น้อยที่สุด, หนึ่งการเชื่อมต่อที่เปิดอยู่ |
| ความสามารถในการขยาย | ง่าย, คำขอไร้สถานะ | ซับซ้อน, ต้องการคิวเหตุการณ์ที่ใช้ร่วมกัน |
การเลือกระหว่างเทคนิคขึ้นอยู่กับความถี่ในการอัปเดตของข้อมูล หากเหตุการณ์เกิดขึ้นบ่อยกว่าทุก 10 วินาที — ทั้งสองวิธีให้ภาระที่เทียบเคียงได้ และ Short Polling อาจง่ายกว่า หากเหตุการณ์เกิดขึ้นน้อย (ชั่วโมงหรือนาทีระหว่างการเปลี่ยนแปลง) — Long Polling เหมาะกว่าเพราะไม่สร้างคำขอเปล่า สำหรับสถานการณ์ระดับกลาง การเลือกขึ้นอยู่กับข้อจำกัดของโครงสร้างพื้นฐานและความสามารถในการใช้ WebSocket
Short Polling ใช้ในสถานการณ์ที่ข้อกำหนดด้านความสดใหม่ของข้อมูลต่ำ และความเรียบง่ายในการนำไปใช้มีความสำคัญเหนือประสิทธิภาพ กรณีทั่วไปที่สุดคือแผงผู้ดูแลระบบภายใน ระบบตรวจสอบที่มีความถี่การแจ้งเตือนต่ำ และแอปพลิเคชันที่ความหน่วง 15–30 วินาทียอมรับได้
ข้อจำกัดสำคัญ — Short Polling ไม่เหมาะสำหรับแอปพลิเคชันที่สำคัญต่อเวลา (เทอร์มินัลการซื้อขาย ระบบแจ้งเตือนฉุกเฉิน) ที่แม้ความหน่วง 1 วินาทีก็ยอมรับไม่ได้ ในสถานการณ์เช่นนี้ จำเป็นต้องใช้ WebSocket, Server-Sent Events หรือ Long Polling เมื่อออกแบบระบบด้วย Short Polling ควรคำนวณงบประมาณคำขอ: ด้วยไคลเอ็นต์ 1,000 รายที่มีช่วงเวลา 5 วินาที เซิร์ฟเวอร์ประมวลผล 12,000 คำขอต่อนาที ซึ่งต้องใช้ฐานทรัพยากรที่สอดคล้องกัน
คำถามที่พบบ่อย
Short Polling คือเมื่อแอปพลิเคชันถามเซิร์ฟเวอร์ทุก N วินาที: "มีข้อมูลใหม่หรือไม่?" และเซิร์ฟเวอร์ตอบทุกครั้ง แม้ว่าจะไม่มีอะไรเปลี่ยนแปลง มันเหมือนกับการเดินไปที่ตู้ไปรษณีย์ทุก 5 นาทีเพื่อตรวจสอบว่ามีจดหมายใหม่มาหรือไม่
ช่วงเวลา Short Polling ที่เหมาะสมที่สุด ขึ้นอยู่กับสถานการณ์: 5–10 วินาทีสำหรับแดชบอร์ดตรวจสอบ 15–30 วินาทีสำหรับฟีดข่าว 30–60 วินาทีสำหรับหน้าสถานะ ช่วงเวลาควรเป็นการแลกเปลี่ยนระหว่างความสดใหม่ของข้อมูลและภาระเซิร์ฟเวอร์ เริ่มต้นที่ 10 วินาทีและปรับตามผลการทดสอบ
Short Polling — ไคลเอ็นต์สอบถามเซิร์ฟเวอร์อย่างต่อเนื่องด้วยช่วงเวลาคงที่ Long Polling — ไคลเอ็นต์ทำหนึ่งคำขอและเซิร์ฟเวอร์เก็บไว้จนกว่าข้อมูลจะปรากฏ Short Polling นำไปใช้ได้ง่ายกว่าแต่สร้างคำขอเปล่ามากกว่าในระหว่างการอัปเดตที่เกิดขึ้นน้อยครั้ง
Short Polling นำไปใช้ได้ง่ายกว่า WebSocket และไม่ต้องการโปรโตคอลพิเศษ — มันทำงานผ่านคำขอ HTTP ทั่วไป Short Polling เหมาะสมสำหรับระบบภายในอย่างง่ายที่ความหน่วง 10–30 วินาทียอมรับได้ และต้นทุนโครงสร้างพื้นฐานเพื่อรองรับ WebSocket ไม่คุ้มค่า
ใช้ช่วงเวลาแบบปรับตัว: เมื่อไม่มีการอัปเดต ให้เพิ่มการหยุดระหว่างคำขอ 2–3 เท่า เพิ่มพารามิเตอร์ since พร้อมการประทับเวลาของคำขอสุดท้ายเพื่อให้เซิร์ฟเวอร์ส่งคืนเฉพาะการเปลี่ยนแปลงเพิ่มเติม แคชการตอบสนองที่ฝั่ง CDN หรือพร็อกซีเซิร์ฟเวอร์เพื่อลดภาระแบ็กเอนด์
สรุป
setInterval หรือ setTimeout แบบเรียกซ้ำด้วยช่วงเวลาคงที่หรือปรับตัวเราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ