2010-12-30 17 views
6

Próbuję zbudować aplikację do czatu wyłącznie za pomocą Rubiego. Istnieje wcześniej opublikowany numer similar question, ale mam inne i powiązane zapytania. Spojrzałem na this example (To samo, co osoba, która wysłała podobne pytanie wcześniej). Kod w tym przykładzie nie działa dla mnie. Po uruchomieniu skryptu ruby ​​na terminalu i po połączeniu się z adresem URL: http://localhost:1234 w przeglądarce, w nieskończoność napotykam komunikat "Transfer danych z localhost ...".Budowanie aplikacji czatu przy użyciu Ruby

Tutaj 1234 to numer portu użyty w podanym przykładzie. Nie jestem w stanie dowiedzieć się, co jest przyczyną mojego nieudanego biegu. Być może muszę podać coś w linii poleceń podczas wykonywania skryptu lub mam rozpocząć chat (wyjście wejściowe) przez inne miejsce (prawdopodobnie przeglądarkę). Nie jestem w stanie dowiedzieć się, co dokładnie robić. Czy możesz mi pomóc w tej sprawie?

Używam kodu serwera czat prawie niezmodyfikowany. Używam usługi internetowej i serwera czatu na tym samym hoście.

Udało mi się częściowo uzyskać kod działający dla mnie do momentu rozpoczęcia pętli. Zmieniony kod, który pracował dla mnie do pewnego momentu, jest podany poniżej.

require 'gserver' 

class BasicServer < GServer 

    def initialize(*args) 
    super(*args) 

    # Keep an overall record of the client IDs allocated 
    # and the lines of chat 
    @@client_id = 0 
    @@chat = [] 
    end 


    def serve(io) 
    # io.puts("Hello world!") 
     # Increment the client ID so each client gets a unique ID 
    @@client_id += 1 
    my_client_id = @@client_id 
    my_position = @@chat.size 


    # io.puts(@@chat.size)  
    # Give the total number of people who are currently on chat.. for e.g. 0 => 1 person on chat  

    # Leave a message on the chat queue to signify this client 
    # has joined the chat 
    @@chat << [my_client_id, ""] 

    # io.puts(@@chat)  

    end 

end 


server = BasicServer.new(1234) 
server.start 

#sleep 120 
#server.shutdown 

Dla każdej instancji przeglądarki nowy klient jest połączony z kolejką czatu (mają unikatowy identyfikator klienta, aby je zidentyfikować). Chciałem ponownie użyć kodu w przykładzie, dodając pole tekstowe (coś podobnego do tego, czego używamy w html) do działających instancji przeglądarki, w którym użytkownik (użytkownicy) może wprowadzić wiadomość i opublikować ją za pomocą kliknięcia przycisku przycisk (który jest również zintegrowany z przeglądarką). Odbija się to we wszystkich innych instancjach przeglądarki różnych klientów, a czat trwa tak długo, aż użytkownicy wprowadzą ciąg "zakończ", aby wyjść z pokoju rozmów.

Nie jestem pewien, jak zaimplementować powyższą funkcję również w Ruby, wszelkie sugestie i powiązane artykuły do ​​odsyłania byłyby naprawdę pomocne.

Wielkie dzięki!

Odpowiedz

4

Zgaduję, że jest to jedyny kod, którego używasz. Sposób, w jaki działa HTTP (protokół używany przez twoją przeglądarkę podczas rozmowy z twoim serwerem), polega na tym, że przeglądarka łączy się z twoimi serwerami, wysyła kilka linii informujących, którą stronę chce pobrać, jakie pliki cookie ma itp. Następnie serwer odpowiada, iw większości przypadków zamyka połączenie. Tak więc w twoim przypadku, gdy łączysz się z serwerem czatu w przeglądarce internetowej, łączy się przeglądarka, BasicServer#serve, niektóre rzeczy są odesłane, a przeglądarka internetowa zamyka połączenie, więc serwer nie może wysłać więcej danych do przeglądarka. Najłatwiejszym sposobem na "naprawienie" tego jest użycie innego sposobu połączenia się z serwerem (telnet lub nc (netcat)). Jeśli chcesz, aby było to w przeglądarce, musisz sprawić, by serwer odpowiadał na żądania HTTP, a następnie zwrócić stronę, która regularnie odpytuje serwer (czytaj na AJAX lub WebSockets). Możesz na to popatrzeć, choć nie jest napisane w Ruby: https://github.com/ry/node_chat.

+0

Witam .. dziękuję za cierpliwość i również dziękuję za odpowiedź .. !!. Po pewnym czasie zdałem sobie sprawę, że faktycznie wdrażam serwer tcp, a nie serwer WWW, więc nie byłbym w stanie uzyskać tego, co chciał. – boddhisattva

+0

To jest to, co mogę zbudować jako aplikację do czatowania: - http://boddhisattvadedicates.blogspot.in/2011/08/chat-application-using-ruby.html – boddhisattva

Powiązane problemy