Wysyłanie ramki ping/pong websocket z przeglądarki

Ciągle czytam o wiadomościach ping / pong w websockets, aby utrzymać połączenie przy życiu, ale nie jestem pewien, co to są. Czy jest to odrębny typ ramy? (Nie widzę żadnych metod na obiekcie WebSocket javascript w chrome związanych z ping-pongiem). Czy jest to po prostu wzorzec projektowy(np. dosłownie wysyłam "ping" lub dowolny inny ciąg na serwer i kazałam mu odpowiedzieć). Czy ping-pong w ogóle ma związek z kontynuacją ramek?

Powodem, dla którego pytam, jest to, że używam frameworka Pythona, który działa za Mongrel2, więc zastanawiam się, czy istnieje sposób, aby wysłać Mongrel2 konkretną wiadomość ping/pong, który mówi, aby utrzymać połączenie przy życiu bez mojej aplikacji python konieczności martwić się o to. Analogicznie do osobnej metody HTTP. I wyobrażam sobie, że dedykowana ramka wiadomości ping / pong mogłaby być prostsza (mniejsze obciążenie serwera i sieci) niż ciąg "ping", choć prawdopodobnie nie miałoby to większego znaczenia.

EDIT: właśnie spojrzałem na RFC 6455 i wygląda jak Ping Pong to zdecydowanie typy ramek sterujących z własnymi kodami opcodes. Jak wysłać ramkę Ping z javascript w Chrome?

Author: danny, 2012-05-14

2 answers

Nie ma Javascript API do wysyłania klatek ping lub odbierania klatek pong. Jest to obsługiwane przez przeglądarkę lub nie. Nie ma również API do włączania, konfigurowania lub wykrywania, czy przeglądarka obsługuje i korzysta z ramek ping/pong. Nie było dyskusja na temat tworzenia Javascript ping / pong API do tego. Istnieje możliwość, że pingi mogą być konfigurowalne/wykrywalne w przyszłości, ale jest mało prawdopodobne, że Javascript będzie w stanie bezpośrednio wysyłać i odbierać ping / pong ramki.

Jeśli jednak kontrolujesz zarówno kod klienta, jak i serwera, możesz łatwo dodać obsługę ping / ponga na wyższym poziomie. Będziesz potrzebował nagłówka/metadanych w wiadomości, Jeśli jeszcze tego nie masz, ale to całkiem proste. O ile nie planujesz wysyłać pingów setki razy na sekundę lub masz tysiące jednoczesnych klientów, koszty ogólne będą dość minimalne, aby zrobić to samodzielnie.

 87
Author: kanaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 15:41:30

Ping ma być wysyłany tylko z serwera do klienta, a przeglądarka powinna odpowiedzieć tak szybko, jak to możliwe z OpCode Pong, automatycznie. Więc nie musicie się o to martwić na wyższym poziomie.

Chociaż nie wszystkie przeglądarki obsługują standard, jak przypuszczają, mogą mieć pewne różnice w implementacji takiego mechanizmu, a to może nawet oznaczać, że nie ma żadnej funkcjonalności odpowiedzi. Ale osobiście używam Ping / ponga i nigdy nie widziałem klienta, który nie implementuje tego typu Kod OpCode i automatyczna reakcja na niskopoziomową implementację po stronie klienta.

 25
Author: moka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-15 09:40:47