Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] shoutbox
Forum PHP.pl > Forum > PHP
sebekzosw
Witam!
Mam zamiar zrobić shoutbox oparty o bazę danych MySQL. Jednak muszę wziąć pod uwagę, że w jednym momencie mnóstwo osób będzie czytało (shoutbox byłby w czasie rzeczywistym - co 1 sec pobieranie wpisów za pomocą ajax lub podczas dodania wpisów) jeżeli tak to w ciągu sekundy wykona się 1000 zapytań dla tysiąca userów nie piszących lub 3000 zapytań dla userów piszących. Jak należy to zrobić, aby było to szybkie, optymalne i bez lagów. Obecnie mam tak, że co pół sekundy za pomocą ajax ładuje plik txt z wpisami, a cron co 2 min wykonuje pętle trwająca 118 sec ( sleep(1); po każdej iteracji ), jednak są lagi w tym. Jakieś sugestie?
tehaha
a po co ajax co 0,5 sekundy? i po co ten cron? jak na dużą liczbę osób to wydaje mi się, że ajax co 2 sekundy całkowicie wystarczy na zwykłego shoutboxa
sebekzosw
jak rozmawia tyle osób to lepiej żeby co 2 sec a cron... ogranicza mi zapytania do 1 w ciągu sekundy niż 1000 dla tylu samo userów... generuje i wpisuje wszystko do pliku txt i ten plik wyświetlam.... strona nie uciągnęła by 1000 zapytań w jednym momencie- za dużo otwartych połączeń
thek
Optymalizuj... Wysyłaj z zapytaniem AJAX choćby znacznik czasu ostatniej wypowiedzi widocznej dla usera po jego stronie. Dopóki jest on identyczny z ostatnim w bazie - nie rób nic/zwracaj coś co oznacza by klient nic nie robił, zostawiał wszystko jak było. Jeśl pojawią się nowe wpisy, będą one różne, co da sygnał do wysłania nowej wersji. Najlepiej jeszcze gdyby to co wygenerowano było wrzucane do cache'u.To zredukuje liczbę zapytań do bazy do jednego pomiędzy nowymi wpisami w shoutboxie. Reszta userów pobierać będzie wpisy z cache.
bim2
Znów będę polecał shoutbox nospora, bo został on napisany bardzo optymalnie. W dziale Gotowe rozwiązania w Algorytmy, klasy funkcje masz temat założony przez ~nospora pod tytułem Shoutbox smile.gif Podejrzyj sobie jak on to rozwiązał. Z tego co kojarze do pliku zapisywał właśnie tak jak thek mówi znacznik czasu albo id ostatniej wypowiedzi smile.gif

Aha, jeśli nie chcesz używać mysql, wydaje mi się że najlepszym wyjściem byłoby użycie wydajnego memcache. Bardzo prosta implementacja tego jest w php, ale na serwerze musisz mieć zainstalowany moduł.

BTW. Js niedługo dostanie obsługę socketów (albo już ma, ja nie w temacie) więc możesz się nimi zainteresować winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.