Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czat AJAX a obciążenie serwera
1010
post
Post #1





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

Ostrzeżenie: (0%)
-----


Witam,
w jednym z moich serwisów zamierzam wprowadzić czat, czyli możliwość komunikowania się z osobami, które są obecnie zalogowane. Chciałbym oprzeć to na jQuery. O ile dobrze do tego podchodzę to powinienem zrobić jakąś tabelkę w bazie, zapytanie które wyciąga aktualne konwersacje itp. Całość co jakiś czas będzie automatycznie wywoływana przez jQuery (AJAX). Pytanie tylko, czy przy dość małym czasie odświeżania takie coś nie zajedzie serwera?

Teraz takie moje teoretyczne rozważania:
Biorąc pod uwagę, że na stronie siedzi 200 osób, dla każdej z nich powiedzmy co 2 sekundy zostanie wywołane automatyczne zapytanie, które będzie sprawdzało czy nie przyszły jakieś wiadomości. Czyli wychodzi średnio 100 zapytań na sekundę. Jest to stosunkowo dużo, porównując całość do sytuacji w której nie ma czata i osoba przeładowuje stronę raz na jakiś czas (powiedzmy średnio do 20-30 sekund).

Jak takie coś ma się do wydajności? Czy oparcie tego czatu ba bazie danych jest dobrym rozwiązaniem?

Myślałem też, żeby zrobić tak, że w przypadku gdy osoba nie prowadzi konwersacji (czyli przez jakiś czas nie przychodziły wiadomości), żeby czas odświeżania wydłużyć do np. 10 sekund, a skracać powiedzmy do 2s. tylko w przypadku, gdy jest obecna rozmowa.

Kolejna rzecz o którą chciałbym zapytać, to przy jakim czasie odświeżania rozmowa jest dość płynna? Czy np. 5 sekund jest już zbyt dużym czasem, żeby można było swobodnie porozmawiać?



Oczywiście nie oczekuję na odpowiedzi w stylu "zachciało Ci się czata to kup porządny serwer, który sobie z tym poradzi"
Chodzi mi raczej o same podejście, czyli jak to zrobić żeby było to najbardziej optymalne.

Z góry dziękuję za jakiekolwiek wskazówki i naprowadzenia.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A po co kombinować zanadto i odświeżać. Już kiedyś pisaliśmy w tematach o "inteligentnych czatach" z innymi moderatorami. Nie sens ściągać wszystko, bo to głupota. Sens to ściągać gdy jest to konieczne. Jak? W parametrze AJAX ustawiaj znacznik czasowy ostatniej wiadomości jaką ma klient. Wysyłaj to do serwera i porównuj ze znacznikiem czasowym ostatnim na serwerze. Jeśli to samo to znaczy, że nic nowego nikt nie napisał i można olać sprawę. Jeśli znacznik na serwerze jest wyższy to wiadomość jest i wyślij do skryptu ją lub grupę wiadomości w jakimś formacie (JSON) do obróbki przez skrypt już u klienta. I tutaj już będzie Cię lało czy odświeżasz co minutę, czy sekundę. Skrypt zrobi swoje tylko gdy będzie musiał. Lepiej zwrócić do skryptu 10000 razy false niż 10000 razy pobierane ciągle rzeczy, czy choćby nawet 10000 razy scache'owane. Nie zabijasz serwera. AJAX wywołuj co 5-10 sekund u klienta. Nie ma sensu częściej. Pisanie odpowiedzi przez ludzi trochę trwa (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 12:36