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 — αναπόφευκτα κενά αιτήματα. Αν τα δεδομένα αλλάζουν σπάνια, τα περισσότερα αιτήματα επιστρέφουν αποτέλεσμα «χωρίς αλλαγές», σπαταλώντας εύρος ζώνης δικτύου και χρόνο επεξεργαστή. Με 10.000 πελάτες και διάστημα προσαρμογής 5 δευτερολέπτων, ο εξυπηρετητής λαμβάνει 2.000 αιτήματα ανά δευτερόλεπτο — ένα σημαντικό μέρος τους είναι άχρηστο αν η συχνότητα ενημερώσεων είναι 1 συμβάν ανά λεπτό.
Το Short Polling λειτουργεί σύμφωνα με έναν απλό κύκλο: ο πελάτης ρυθμίζει έναν χρονομετρητή διαστήματος με συγκεκριμένη περίοδο (π.χ. 5000 ms). Σε κάθε ενεργοποίηση του χρονομετρητή, ο πελάτης δημιουργεί ένα αίτημα HTTP GET προς το endpoint του εξυπηρετητή, συνήθως με παράμετρο χρονοσφραγίδας της τελευταίας ενημέρωσης. Ο εξυπηρετητής λαμβάνει το αίτημα, ελέγχει για νέα δεδομένα μετά την καθορισμένη χρονοσφραγίδα και επιστρέφει μια απάντηση — είτε με νέα δεδομένα είτε με δείκτη απουσίας ενημερώσεων.
Η κρίσιμη παράμετρος διαμόρφωσης του Short Polling — το διάστημα προσαρμογής. Ένα πολύ σύντομο διάστημα (λιγότερο από 3 δευτερόλεπτα) δημιουργεί υψηλή φόρτιση στον εξυπηρετητή και το δίκτυο. Ένα πολύ μακρύ διάστημα (πάνω από 30 δευτερόλεπτα) μειώνει την επικαιρότητα δεδομένων. Το βέλτιστο διάστημα εξαρτάται από το σενάριο: για πίνακες παρακολούθησης — 5–15 δευτερόλεπτα, για ροή ειδήσεων — 30–60 δευτερόλεπτα, για κρίσιμες ειδοποιήσεις — 1–3 δευτερόλεπτα. Η επιλογή διαστήματος είναι πάντα ένας συμβιβασμός μεταξύ της επικαιρότητας δεδομένων και της φόρτισης υποδομής.
Για τη μείωση της φόρτισης κατά την αδράνεια, χρησιμοποιείται ένα προσαρμοζόμενο διάστημα: αν πολλά διαδοχικά αιτήματα επιστρέψουν κενό αποτέλεσμα, το διάστημα αυξάνεται (π.χ. από 5 σε 15 δευτερόλεπτα). Όταν εμφανιστούν νέα δεδομένα, το διάστημα επιστρέφει στην ελάχιστη τιμή. Ο αλγόριθμος εκθετικής καθυστέρησης (exponential backoff) επιτρέπει τη μείωση του αριθμού των κενών αιτημάτων κατά 3–5 φορές σε σπάνιες ενημερώσεις.
Ας δούμε την υλοποίηση από την πλευρά του πελάτη του Short Polling χρησιμοποιώντας setInterval και Fetch API. Η συνάρτηση δέχεται το URL του endpoint και το διάστημα προσαρμογής σε χιλιοστά δευτερολέπτου.
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 endpoint που δέχεται αιτήματα 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 ή διακομιστή μεσολάβησης για μείωση φόρτισης backend.
Σύνοψη
setInterval ή αναδρομικού setTimeout με σταθερό ή προσαρμοζόμενο διάστημα.Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης