WebSocket API браузера має send(). Він не надає загального методу ping(), яким JavaScript міг би надсилати кадри Ping протоколу.

Якщо ваша програма надсилає текстове повідомлення, наприклад {"type":"heartbeat"}, це прикладні дані. Сервер має розуміти повідомлення й визначати відповідь. Сервер, який не реалізує цей контракт, не зобов'язаний відповідати протокольним Pong лише тому, що в тексті є слово ping.

Визначте, що означає підтвердження, як воно ідентифікує очікуваний heartbeat і коли старе підтвердження приходить надто пізно. Тримайте це окремо від підтвердження ділової операції.

Таймер JavaScript також має обмеження планування. Фонові вкладки та зайняті головні потоки можуть затримувати зворотні виклики. Не трактуйте пропущену точну межу таймера як остаточний доказ того, що проксі припинив пересилати.

Браузер може обробляти керівні кадри протоколу всередині, але це не дає прикладному коду переносного подання кожного Ping або Pong. Якщо сторінці потрібне власне рішення про живучість, використовуйте явний прикладний контракт і політику відновлення.

Сокет, у якого readyState дорівнює OPEN, локально вважається відкритим; це не незалежний вимір того, що віддалена програма обробила ваше останнє повідомлення. Використовуйте докази, що відповідають питанню, на яке вам справді треба відповісти.

Схожі статті