Czat internetowy w Ajax?


(Xardas8) #1

Witam, chciałem napisać czat, normalny, zwykły czat. Zabrałem się do tego z myślą że Ajax spelni moje wymogi, ale juz po chwili sobie zadałem pytanie. "Jak zrobic, aby czesc strony zostala przeladowana dopiero w momencie gdy ktos cos napisze ?"

 

oczywiscie moglbym zrobic tak ze funkcja odswiezenia by to robila np. co 100ms, ale co to wtedy by sie dzialo... pewnie by nie wyrobily zapytania do mysql 

 

Opisze sposob jak planowałem to zrobic: 

  • Ktos pisze wiadomosc, w momencie klikniecia enter lub na przycisk wyslij, ajax wysyla wiadomosc, aby php moglo zapisac wiadomosc w bazie mysql

  • Od razu wiadomosc zostaje wyciagnieta z bazy, i pokazana na czacie (Dla kazdego..) <-- i tu jest problem, Bo osobe ktora wysyla mozna zmusic do przeladowania czatu, ale jak zrobic aby innym w tym momencie tez sie przeladowal czat ?

 

Wiec moje pytanie, czy jest jakis sposob, aby to rozwiazac ? Czy po prostu Ajax nie nadaje sie do takiego czegos ; / ? 

Moze inne pomysly jakbym mogl to zrobic 


(Kamatori) #2

Użyj websocketów + jquery. 


(Pablo_Wawa) #3

Każdy z klientów, co ustalony czas (np. te 100 ms) odpytuje serwer (skrypt na serwerze), czy nie pojawiły się nowe teksty - i teraz ten skrypt może być sprytny i pamiętać (w bazie danych czy jakimś pliku na serwerze), kiedy został napisany ostatni tekst (w sensie daty i czasu - timestamp) i jeśli dany klient odpytuje go po tym czasie (który pamięta się z zmiennej sesyjnej dla tego użytkownika), skrypt wysyła mu stosowne dane/teksty (bo może być więcej niż 1 tekst). Albo można numerować każdy tekst (jego ‘id’ z bazy danych) i tylko po nim porównywać, czy się już dostało taki numer, czy jakiś mniejszy i wtedy pobrać wszystkie większe od tego zapamiętanego.

Poza tym pamiętajmy, że silniki baz danych (w tym i MySQL) też są zoptymalizowane i dane zapytanie, jak się powtarza i ma taki sam wynik, może nie obciążyć zbytnio serwera bazodanowego.


(pio_95) #4

Polling jest często wykorzystywany w takich przypadkach, więc pomysł jak najbardziej dobry - chociaż raczej odpytywałbym co kilka sekund, a nie 100ms  :stuck_out_tongue:


(Xardas8) #5

Rzeczywiście, poczytałem troszkę o websocket’ach I rzeczywiście było by to najlepsze rozwiązanie. Ten sposób ze sprawdzaniem ID również ciekawy i chyba aktualnie go zastosuje, bo jeżeli chodzi o websocket, to większość poradników jest w języku angielskim, a niestety mam problem na zaawansowanym angielskim, aby zrozumieć dokładność przekazu, chyba że ktoś z was zna jakiś polski poradnik o zastosowaniu ? z góry dziękuje 


(nintyfan) #6

Jest też webrtc, ale z technologiami webowymi dawno nie miałem do czynienia(oprócz baz danych, frameworków PHP i JQuery).


(Frankfurterium) #7

 

Jeżeli chcesz się bawić w programowanie poważnie (robić naprawdę fajne rzeczy i/lub czerpać z tego pieniądze), rozumienie technicznego angielskiego to naprawdę must have. Od pewnego poziomu polskie tutoriale są albo przeterminowane, albo zwyczajnie słabe, a pewnych rzeczy dowiesz się jedynie u źródła (np. oficjalnej dokumentacji). Tak wygląda ta branża i albo się dostosujesz, albo ugrzęźniesz w średniactwie.


(Xardas8) #8

Tak, zgadzam się z tym że Angielski to podstawa w programowaniu, ale aktualnie jestem uczniem szkoły średniej, a niestety tam nie mamy możliwości nauki na takim poziomie, oczywiście zostaje mi też nauka na własną rękę. Niestety aktualnie matura i te sprawy - również są ważne. Więc Angielski rozszerzony zostawiam sobie na bliską przyszłość ;).Dziękuje za poradę, na pewno będę do tego dążył


(Frankfurterium) #9

Angielski techniczny (programistyczny) =/= angielski rozszerzony. Mój (i różnych moich znajomych programistów) angielski mówiony i pisany jest co najwyżej średni, a nie mam żadnych problemów z rozczytywaniem różnych i różniastych dokumentacji. Techniczne teksty o programowaniu nie zawierają skomplikowanych konstrukcji gramatycznych ani zagmatwanych czasów. Takie artykuły tworzą i czytają ludzie z całego świata, więc wszystko musi być przekazane w sposób prosty i jednoznaczny. Zasób słów też jest specyficzny i raczej nie nauczysz się go na żadnym rozszerzonym kursie (chyba że sztywno nakierowanym na programistów, a te są drogie i rzadkie). Jedyna droga nauki to kontakt z blogami, artykułami i dokumentacją techniczną. Generalnie polecam wygospodarować godzinkę czasu tygodniowo na lekturę, bo jeżeli po maturze zamierzasz iść na studia techniczne… Sam większość zalecanych materiałów na polibudzie miałem w języku angielskim.


(nintyfan) #10

Tylko nauka na własną rękę. Ja miałem na studiach język angielski, ale niestety nie techniczny angiielski.