Τα heartbeats του WebSocket στον περιηγητή χρειάζονται πρωτόκολλο εφαρμογής
Σχεδιάστε ένα συμφωνημένο heartbeat εφαρμογής όταν η JavaScript του περιηγητή δεν μπορεί να στείλει απευθείας πλαίσια WebSocket Ping.
Το WebSocket API του περιηγητή διαθέτει send(). Δεν εκθέτει μια γενική μέθοδο ping() ώστε η JavaScript να στέλνει πλαίσια Ping του πρωτοκόλλου.
Αν η εφαρμογή σας στείλει ένα μήνυμα κειμένου όπως {"type":"heartbeat"}, αυτά είναι δεδομένα εφαρμογής. Ο διακομιστής πρέπει να κατανοεί το μήνυμα και να ορίζει μια απάντηση. Ένας διακομιστής που δεν εφαρμόζει αυτό το συμβόλαιο δεν υποχρεούται να απαντήσει με Pong του πρωτοκόλλου μόνο και μόνο επειδή το κείμενο περιέχει τη λέξη ping.
Ορίστε τι σημαίνει μια επιβεβαίωση, πώς αναγνωρίζει το heartbeat που εκκρεμεί και πότε μια παλιά επιβεβαίωση έρχεται πολύ αργά. Κρατήστε το ξεχωριστό από την επιβεβαίωση μιας επιχειρηματικής πράξης.
Ένας χρονομέτρης JavaScript έχει επίσης περιορισμούς προγραμματισμού. Οι καρτέλες στο παρασκήνιο και τα απασχολημένα κύρια νήματα μπορούν να καθυστερήσουν τις επιστροφές κλήσεων. Μην ερμηνεύετε ένα χαμένο ακριβές όριο χρονομέτρου ως ατράνταχτη απόδειξη ότι ο διαμεσολαβητής σταμάτησε να προωθεί.
Ο περιηγητής μπορεί να χειρίζεται εσωτερικά τα πλαίσια ελέγχου του πρωτοκόλλου, αλλά αυτό δεν δίνει στον κώδικα εφαρμογής μια φορητή εικόνα κάθε Ping ή Pong. Αν η σελίδα χρειάζεται τη δική της απόφαση ζωντάνιας, χρησιμοποιήστε ένα ρητό συμβόλαιο εφαρμογής και μια πολιτική ανάκτησης.
Ένας υποδοχέας του οποίου το readyState είναι OPEN θεωρείται τοπικά ανοιχτός· δεν είναι ανεξάρτητη μέτρηση ότι η απομακρυσμένη εφαρμογή επεξεργάστηκε το τελευταίο σας μήνυμα. Χρησιμοποιήστε τα στοιχεία που ταιριάζουν στο ερώτημα που πρέπει πραγματικά να απαντήσετε.