Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][JavaScript][PHP] Czat z konsultantem
Forum PHP.pl > Forum > Przedszkole
thomson89
Witam!

Chciałbym wykonać czat z konsultantem na stronę www. Tylko nie wiem jak się za to zabrać. Na pewno będę pracował na jQuery. Muszę wykonać kontroler rozmowy, okienko dla konsultanta oraz prosty formularz na stronie.

Tylko jak to wykonać, by konsultant mógł np. prowadzić dwie rozmowy jednocześnie. I drugie pytanie, gdzie zapisywać dane z czatu i czy w ogóle je zapisywać.

Proszę o pomoc!
bastard13
Takie rzeczy to chyba lepiej w Javie pisaćsmile.gif
Ja bym zrobił to w ten sposób:
Tabela z wiadomościami (od kogo, do kogo, data, treść, czy_przeczytane) i tabela z informacją czy są nowe wiadomości (nick, czy nowe).
Wysyłanie wiadomości za pomocą AJAX'a i zapis do bazy nowej wiadomości + ustawienie czy_nowe=true dla adresata wiadomości.
Oprócz tego jakaś funkcja, która odpytuje serwer (też AJAX), czy są nowe wiadomości (jakiś parametr z tym od kogo oczekujemy odpowiedzi), jeżeli są to je pobiera. Ustawia, że zostały przeczytane, a w drugiej tablicy, że brak nowych.
Jeżeli są nowe to jakiś komunikat lub ikonka lub co tam chcesz:)
Co do dwóch rozmów, to możesz podzielić ekran na zakładki (takie pseudo GG) i w przypadku, gdy jest nowa wiadomość od danego użytkownika to jakoś go zaznaczasz. Z tym, że w takim przypadku nie wiem co będzie lepsze, czy uruchomienie dwóch funkcji odpytujących, czy wysyłanie/ odbieranie wszystkich danych i rozdzielanie ich po stronie serwera/klienta.
thomson89
Zbyt dużo tych zapytań. Myślałem nad tym, żeby rozmowę zapisać ale po zakończeniu konsultacji.

Czy jest możliwość nasłuchiwania? Jakaś funkcja, która by czekała na jakieś dane i wykonywała odpowiednią funkcję. Uważam, że to nie skrypt po stronie klienta / konsultanta powinien pobierać wiadomości a tylko wysyłać. Trzeba to jakoś uprościć. Podzielić czat na dwa komunikatory. Każdy nasłuchiwał by gdzieś czy ktoś do niego coś wysyła i wysyłał wiadomości na dane id drugiego komunikatora. Czy jest takie coś do załatwienia?
bastard13
Jasne, że najlepszym rozwiązaniem byłoby, gdyby rozmowa 'wisiała w powietrzu'. Tylko, że funkcja nasłuchująca (jeżeli masz do dyspozycji PHP, JS + AJAX) musi łączyć się z serwerem, żeby sprawdzić czy jest jakaś wiadomość do ciebie. Nie jesteś w stanie (jako klient) odebrać żadnych danych, jeżeli najpierw o nie nie poprosisz.
thomson89
Jak więc wywiesić rozmowę? smile.gif I gdzie na serwerze umieszczać te dane? W jaki sposób?
bastard13
Ja bym zrobił to tak:
1) tabele w bazie np:
- Rozmowy: kto, do_kogo, czy_nowe; (czyli dla jednej rozmowy dwa takie wpisy, ponieważ w pierwszym twoje id jest w kto, a w drugim do_kogo)
- Wiadomości: treść, czy_przeczytana, od_kogo, kto (dla każdego wysłanej wiadomości)
- Zalogowany: kto, czy_zalogowany

2) zawsze działa funkcja (AJAX), która łączy się co x czas i sprawdza czy istnieje wpis gdzie do_kogo == ja i czy_nowe==true, jeżeli tak to informuje mnie o tym, że X (czyli osoba z kolumny kto) wysłała mi nową wiadomość i mogę otworzyć czat.

3) nawiązanie rozmowy z X, czyli wysłanie pierwszej wiadomości:
- uruchomienie programu, który łączy się z serwerem (AJAX) i sprawdza, czy X zalogowany. Dodaje nowy wpis do tabeli Rozmowy(bądź aktualizuje wpis czy_nowe=true) oraz Wiadomosci. Jeżeli X nie zalogowany to w informacjach odebranych z serwera znajduje się taka informacja, żebym nie czekał niepotrzebnie.
- jeżeli X ma uruchomioną stronę, to jego funkcja nasłuchująca informuje go o tym, że ma nową wiadomość.
- X otwiera czat i automatycznie pobiera wiadomości ode mnie gdzie czy_przeczytana == false. Aktualizuje automatycznie, że przeczytane oraz w tabeli Rozmowy aktualizuje, że ode mnie brak nowych wiadomości.
- jak X odpowie, to całe działanie się powtarza.

Możesz jeszcze dodać jakieś pole z czasem ostatniego wpisu i po x czasie uznać, że rozmowa jest nie aktualna.
Quantum
Cytat(bastard13)
Jasne, że najlepszym rozwiązaniem byłoby, gdyby rozmowa 'wisiała w powietrzu'. Tylko, że funkcja nasłuchująca (jeżeli masz do dyspozycji PHP, JS + AJAX) musi łączyć się z serwerem, żeby sprawdzić czy jest jakaś wiadomość do ciebie. Nie jesteś w stanie (jako klient) odebrać żadnych danych, jeżeli najpierw o nie nie poprosisz.

PHP ma obsługę socketów (choć na serwer proponowałbym pythona, a już najlepiej C jeżeli masz taką możliwość), a dla JS zostało napisane parę bibliotek umożliwiających nasłuchiwanie (np: jSocket). Wystarczy napisać wielowątkowy serwer w oparciu o gniazda oraz klienta który by się z nim łączył. Oprócz JS masz jeszcze Adobe Flex, który również umożliwia takie połączenie. W taki oto sposób połączenie będzie ciągle "wisieć".
Fifi209
Jeżeli nie będzie to dużym problemem możesz skorzystać z widget gadu-gadu winksmiley.jpg Używałem długi czas tego widget'u i się naprawdę sprawdził.
Skie
Sądzę, że ten artykuł Ci się bardzo przyda:
http://blog.wilgucki.pl/2010/04/komunikacj...o+World!%29
thomson89
Cytat(fifi209 @ 4.09.2010, 10:03:26 ) *
Jeżeli nie będzie to dużym problemem możesz skorzystać z widget gadu-gadu winksmiley.jpg Używałem długi czas tego widget'u i się naprawdę sprawdził.

Wydaję się że sprawdzi się. Jednakże, nie lubię korzystać z gotowych rozwiązań, ponieważ zawsze gdzieś na stronie będzie że to i to pochodzi stąd, skrypt sondy stąd a czat stąd. Uważam że takie coś wpływa negatywnie na wizerunek nie tylko strony firmowej ale całej firmy. Jest to na pewno jakieś rozwiązanie i można to wprowadzić do czasu gdy czegoś swojego nie napiszę smile.gif
Cytat(Skie @ 4.09.2010, 10:49:36 ) *
Sądzę, że ten artykuł Ci się bardzo przyda:
http://blog.wilgucki.pl/2010/04/komunikacj...o+World!%29

Czegoś takiego potrzebuję. Tylko nie rozumiem aplikacji klienckiej - tego xml'a.
Quantum
Cytat
Tylko nie rozumiem aplikacji klienckiej - tego xml'a.

to kod dla Flex-a, o którym mówiłem, można też uzyć Silverlight-a od Microsoftu, jednakże klient musiałby instalować dodatkowe oprogramowanie aby zobaczyć czat biggrin.gif ciekawy jest projekt jssockets (mostkiem jest Flex, flash musi być zainstalowany na komputerze klienta) http://code.google.com/p/jssockets/, nie musisz znać tej technologii, aby jej użyć bowiem komunikacja z gniazdem odbywa się tak jakby przez JS (wystarczy podpiąć własne callbacki).
thomson89
To co z tym kodem zrobić?
Quantum
sprawdź bibliotekę o której piszę, ew. skompiluj kod flex jego kompilatorem.
Kod
mxmlc flex.mxml
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.