![]() |
![]() ![]() |
![]() |
![]()
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. -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Zalezy od tego jak bardzo aktywny bedzie ten czat na twojej stronie, jesli malo to 5sec jest ok jak juz duzo ludzi zacznie pisac to powyzej 2sec nawet nie idz wiem z doswiadczenia.....sam mialem kiedys shoutbox na stronie przy 3 osoback ktore intenswynie pisaly jak na gg wszystko ladnie chodzilo ale refresh byl chyba co 1sec...
-------------------- Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/ Moj blog |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
I tutaj przydałyby się sockety, niestety okazało się, że są nie dość bezpieczne i producenci przeglądarek się z nich wycofali.
Kiedyś szukałem czegoś podobnego, zobacz ten temat: Komunikacja (powiadamianie) ServerSide -> ClientSide oparte na zdarzeniach Ciągłe odświeżanie przy większej liczbie użytkowników zabije serwer, chyba, że w miarę wzrostu obciążenia wydłużysz interwał odświeżania. -------------------- |
|
|
![]()
Post
#4
|
|
![]() 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
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 182 Pomógł: 115 Dołączył: 4.03.2009 Skąd: Myszków Ostrzeżenie: (0%) ![]() ![]() |
Można wykorzystać Comet, jak na Facebooku, obciążenie powinno być mniejsze. Dzięki temu masz jedno, ale długie żądanie, w którym serwer odpowiada gdy zajdzie taka potrzeba. Co jakiś czas wystarczy tylko ponowić żądanie.
|
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Pobaw się Javą. Serwer sam Ci prześle dane kiedy ktoś napisze odpowiedź.
Nie będziesz musiał pingować, żeby sprawdzić czy ktoś coś napisał ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Tak jak Mephistofeles powiedział, wykorzystaj Comet. Tworzysz iframe który w adresie ma podaną lokację do skryptu działającego w nieskończoność. Wtedy powiedzmy jak ktoś doda coś do bazy, to robisz echo 'wiadomosc'; flush(); i javascriptem poprawnie sobie to odczytujesz
![]() Polecam Ajax Push Engine ![]() -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 19:34 |