Προς το περιεχόμενο

PHP / MySQL / JavaScript: προσθήκη περιορισμένου χρόνου σε seconds να δώσει κάποιος απάντηση σε μια ερώτηση Quiz


philos
Μετάβαση στην απάντηση Απαντήθηκε από Predatorkill,

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Έχοντας υλοποιήσει αντίστοιχες εφαρμογές όσον αφορά το functionality θα παραθέσω και εγώ κάποιες παρατηρήσεις/προτάσεις:

  • Το timeframe για το action κάποιου χρήστη το ορίζει/παρακολουθεί πάντα ο server. Οποιαδήποτε malfunction στην συσκευή του χρήστη δεν αφορά την διαδικασία. (Προφανώς και δημιουργούμε σενάρια και cases για να βοηθήσουμε όσο το δυνατόν περισσότερο τον χρήστη για την ορθή λειτουργία της εφαρμογής ειδικά σε περιπτώσεις καθυστερήσεων κλπ. αλλά την τελική ευθύνη την έχει πάντα αυτός.) 
     
  • Γενικότερος κανόνας είναι πως κάθε ευαίσθητη και σημαντική πληροφορία τηρείται και παρακολουθείται απο τον server και ποτέ απο τον client.
     
  • Η πιο έυκολη και σχετικά αξιόπιστη λύση για παρακολούθηση της αντίστροφης μέτρησης καθώς και της ενημέρωσης του χρήστη για οποιοδήποτε "event" είναι η χρήση WebSocket.
     
  • Η λύση με το hashed timestamp + κάποιο unique identifier της ερώτησης και του χρήστη είναι μια έξυπνη λύση αλλά μπλέκεις με πολυπλοκότητα που δεν την χρειάζεσαι απο την στιγμή που έχεις server side το Session του χρήστη καθώς και ΒΔ εάν απαιτείται πιο εκτεταμένη καταγραφή των steps, time κλπ.
     
  • Όπως είπε ο @k33theod η χρήση του REQUEST_TIME αντί του time() είναι προτιμότερη και για λόγους redundancy της πληροφορίας αλλά καθώς και για χαμένα ms. 
     
  • 20s επιπλέον για την αποδοχή μιας απάντησης είναι πάρα πολλά.
     
  • Σχετικά με το countdown, εφόσoν έχεις αποθηκεύσει κάπου (είτε στο Session, είτε κάπου αλλού) το request time, ή ακόμα καλύτερα εάν έχει WebSockets την ώρα που άνοιξε το Socket, τότε σε κάθε refresh την σελίδας μπορείς να στέλνεις την διαφορά στον Client για τον countdown.
     
  • Το countdown του timeframe θα μπορούσε να το κάνει ο server σε ένα thread και να μην χρειάζεσαι καν κάποιο request απο τον χρήστη για να αλλάξεις το state πχ σε closed,submitted,expired και να ενημερωθεί στο επόμενο submit του εάν είναι valid ή όχι. Ειδικά στην περίπτωση που χρησιμοποιήσεις sockets τα πράγματα γίνονται πιο απλά διότι μπορεί να ενημερωθεί άμεσα με ένα νέο message.
Επεξ/σία από Petraman
  • Like 3
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 32
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

44 λεπτά πριν, Petraman είπε
  • Σχετικά με το countdown, εφόσoν έχεις αποθηκεύσει κάπου (είτε στο Session, είτε κάπου αλλού) το request time, ή ακόμα καλύτερα εάν έχει WebSockets την ώρα που άνοιξε το Socket, τότε σε κάθε refresh την σελίδας μπορείς να στέλνεις την διαφορά στον Client για τον countdown.

To request time είναι στον server, αν για τον οποιονδήποτε λόγο αργήσουν οι πληροφορίες να εμφανιστούν στον client 2 δευτερόλεπτα, τότε πως θα το ξέρει αυτό ο server; Μπορείς να μας δώσεις ένα απλό παράδειγμα;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
19 hours ago, rafinos said:

To request time είναι στον server, αν για τον οποιονδήποτε λόγο αργήσουν οι πληροφορίες να εμφανιστούν στον client 2 δευτερόλεπτα, τότε πως θα το ξέρει αυτό ο server; Μπορείς να μας δώσεις ένα απλό παράδειγμα;

Ο server δεν χρειάζεται να γνωρίζει την καθυστέρηση του client. Ο client χρειάζεται να γνωρίζει την καθυστέρηση του response. Ο server δίνει το timeframe όπου είναι επιτρεπτή η ενέργεια και δεν μεταβάλεται απο τον χρήστη, αν προλάβει πρόλαβε.Το ζήτημα είναι ο χρήστης να ενημερωθεί σωστά σε σχέση με τον χρόνο που του απομένει κλπ.

Υπάρχουν πολλοί τρόποι να μετρήσεις το diff σε σχέση με το request time, ανάλογα με τις τεχνολογίες/μεθόδους που έχουν εφαρμοστεί στην υλοποίηση καθώς και τις ανάγκες.
Για παράδειγμα στο case του @philos που χρησιμοποιεί ajax call μπορεί στο init του call να κρατήσει το timestamp του client και στο completion του request όπου θα κάνει handle την πληροφορία να βρεί την διαφορά με το current timestamp και να την εφαρμόσει στην πληροφορία.
 

Επεξ/σία από Petraman
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...