Przepraszamy za niewyraźne pytanie, ale Omegle ma dokładnie to, co chcę na mojej stronie. To jest czysty system czatu. Natychmiast wysyłasz i odbierasz wiadomości. Spędziłem dzisiaj na szukaniu metody shoutbox, ale wszystko, co mogłem znaleźć, to ludzie, którzy chcieli używać MySQL i interwałów javascript do sprawdzania. Omegle aktualizuje się natychmiast z nowymi wiadomościami. Jak to wszystko działa?Jak działa Omegle?
Odpowiedz
Powinieneś przeczytać ten wikipedia article, da ci to lepszy wgląd w proces.
Głównymi słowami kluczowymi są tu: długie polling, websockets, gniazda flash.
To także (jedno z miejsc) miejsce, w którym świeci node.js + socket.io.
To jest bułka z masłem. Wszystko czego potrzebujesz to serwer, który możesz napisać za kilka minut (w C#, nie jesteś pewien PHP). Serwer powinien zaakceptować żądania HTTP GET, jak to na przykład:
GET /chat?room=someroom&me=Jerod HTTP/1.1
i utrzymać otwarte połączenie (tylko zaakceptować TcpClient
przedmiotu oraz ból go pod jakimś słowniku np Dictionaty<string, Dictionary<string, TcpClient>> clients;
tak: clients["someroom"].Add("Jerod", tcpClient);
i przytrzymaj go, dopóki nie istnieje dane odesłać do Jerod)
I powinien przyjąć POST, która przechowuje tekst użytkownik próbuje wysłać do innych użytkowników w pokoju:
POST /chat?room=someroom&me=Sara HTTP/1.1
Content-Length: 2
Hi
Gdy serwer otrzyma to, wie, że Sara wysyła "Hi" do wszystkich użytkowników w pokoju "someroom". Od Jerod'S, nigdy nie dostałem odpowiedzi, połączenie jest nadal otwarta, a wszystkie serwera musi zrobić, to dostać tego połączenia na podstawie słownika (lub jakaś inna struktura danych) i odpowiedzieć:
HTTP 200 OK
Content-Length: <length>
Sara: Hi
A po stronie klientów, miałbyś jeden obiekt XMLHttpRequest GET (AJAX z metodą GET), który będzie miał ustawiony limit czasu na 0 (blok do nieskończoności) i będzie on używany do otwierania połączenia z serwerem, przez które będzie przekazywał rzeczy wysyłane przez inne osoby.
Potrzebujesz jeszcze jednego POST XMLHttpRequest, którego użyjesz do wysłania danych do innych klientów.
Kiedy pierwszy AJAX (GET) się powiedzie, wypiszesz TEKST, który posiada (jest "Sara: Cześć") do jakiegoś DIV, i ponownie wykonasz to samo żądanie GET, aby serwer mógł dać znać użytkownikowi, gdy ktoś inny pisał po Sara ...
po drugie AJAX (POST) zakończy się pomyślnie, piszesz do div co kiedykolwiek użytkownik wprowadził do wysłania, poprzedzany z nazwą użytkownika, tak jak w JS: document.getElementById("chat").innerHTML += uname+": "+txt;
Jego dość prosto i prosto.
Skuteczny system czatowy utrzymuje połączenie, w którym serwer informuje klienta o nowych wiadomościach, w przeciwieństwie do metody pozwalającej klientowi prosić o nowe pytania co n ms, ponieważ nie pozostaje żadne połączenie. – Nobody
Jak to zrobić? – mowwwalker
Najprawdopodobniej jest to zrobione z czymś podobnym do opisanego w rozdziale "Streaming" na stronie Komety (http://en.wikipedia.org/wiki/Comet_ (programowanie)). Zdecydowanie istnieje trzecia biblioteka, która implementuje Comets w PHP, spróbuj go uruchomić. – J0HN