Interfejs API WordPress Heartbeat używa admin-ajax.php do uruchamiania wywołań AJAX. Jeśli użytkownik X pozostawi otwartą przeglądarkę, wiele połączeń zostanie nawiązanych na serwer, a każde połączenie będzie miało miejsce, gdy nastąpi „bicie”. Teraz, jeśli użytkownik Y pozostawi otwartą przeglądarkę, do serwera zostanie nawiązanych znacznie więcej połączeń, a każde z nich będzie miało miejsce w przypadku „bicia”. Możliwe, że w dużej witrynie będą również znajdować się użytkownicy A, B i C.
Moje pytanie:
Biorąc pod uwagę, że wielu użytkowników może jednocześnie uzyskiwać dostęp do witryny, czy WordPress Heartbeat API „bije” rozłożone w czasie („bicie” dla użytkownika X następuje kilka sekund przed „bicie” dla użytkownika Y) lub „bicie” występuje dokładnie w tym samym czas dla wszystkich użytkowników?
Jeśli „beaty” nie są rozłożone, moim zmartwieniem jest bardzo duże obciążenie serwera w momencie, w którym występuje „beat”.
źródło
Odpowiedzi:
Myślę, że rytmy są rozłożone w przyrodzie, ponieważ następny tik zależy od czasu przeglądarki
time()
wscheduleNextTick()
metodzie w/wp-includes/js/heartbeat.js
pliku:gdzie służy do planowania następnego tiku za pomocą
setTimeout
funkcji:Czas przeglądarki definiuje się jako:
connect()
Metoda zawiera wywołanie ajax i wykorzystujealways()
aby zaplanować następny tik.
Dostępne interwały tyknięcia to 5s, 15s, 30s i 60s.
W przypadku dużej liczby bardzo aktywnych użytkowników, z krótkim odstępem czasu między tikami, rytmy mogą wydawać się występować jednocześnie.
Zawsze dobrze jest mieć jakieś dane, abyś mógł rejestrować tiki od zalogowanych użytkowników za pomocą
heartbeat_tick
haka:Oto przykład z
ticks.log
pliku:źródło