2010-12-30 16 views
6

Sto provando a creare un'applicazione di chat utilizzando esclusivamente Ruby. C'è un similar question pubblicato in precedenza, ma ho domande diverse e correlate. Ho guardato a this example (come riferito dalla persona che ha pubblicato una domanda simile in precedenza). Il codice nell'esempio non sembra funzionare per me. Eseguendo lo script ruby ​​sul terminale e collegandomi all'URL: http://localhost:1234 nel mio browser, incontro indefinitamente un messaggio "Trasferimento dati da localhost ...".Creazione di un'applicazione di chat utilizzando Ruby

Qui 1234 è il numero di porta utilizzato nell'esempio fornito. Non sono in grado di capire quale sia la ragione dietro la mia corsa fallita. Potrebbe essere necessario specificare qualcosa nella riga di comando mentre si esegue lo script o si suppone che avvii la chat (input input) in qualche altro posto (probabilmente il browser). Non sono in grado di capire cosa esattamente fare. Potresti per favore darmi una mano su questo?

Sto eseguendo il codice del server di chat praticamente non modificato. Sto eseguendo il servizio Web e il server di chat sullo stesso host.

Sono stato in grado di ottenere parzialmente il codice che funziona per me fino al punto in cui inizia il ciclo. Di seguito è riportato il codice modificato che ha funzionato per me fino a un certo punto.

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 

Per ogni istanza del browser un nuovo client è connesso alla coda Chat (hanno unici client id per identificarli). Volevo riutilizzare il codice nell'esempio aggiungendo una casella di testo (qualcosa di simile a quello che usiamo in html) alle istanze del browser in esecuzione in cui un utente (i) può inserire il suo messaggio e postarlo dire usando il click di un pulsante (che è anche integrato nel browser). Ciò si riflette in tutte le altre istanze di browser di vari client e la chat continua così fino a quando gli utenti non inseriscono una stringa "esci" per uscire dalla chat room.

Non sono sicuro di come implementare la funzionalità di cui sopra in Ruby, eventuali suggerimenti o articoli correlati da riferire sarebbero davvero utili.

Grazie mille !!

risposta

4

Immagino che questo sia l'unico codice che stai utilizzando. Il modo in cui HTTP (il protocollo utilizzato dal browser Web quando si parla con il server) funziona, è che il browser si connette ai server, invia alcune linee che indicano quale pagina desidera ottenere, quali cookie ha, ecc. Il server risponde quindi, e nella maggior parte dei casi, chiude la connessione. Quindi, nel tuo caso, quando ti connetti al server di chat nel tuo browser web, il browser si connette, BasicServer#serve viene chiamato, alcune cose vengono restituite e il browser chiude la connessione, quindi il server non può inviare più dati al browser. Il modo più semplice per "risolvere" questo è usare un modo diverso di connettersi al tuo server (telnet o nc (netcat)). Se si desidera che questo sia in un browser, è necessario che il server risponda alle richieste HTTP e quindi restituisca una pagina che esegue regolarmente il polling del server (lettura su AJAX o WebSockets). Puoi guardare questo per ispirazione, anche se non è scritto in Ruby: https://github.com/ry/node_chat.

+0

Ciao .. grazie per essere paziente e grazie anche per la risposta .. !!. Dopo un po 'mi sono reso conto che stavo implementando un server TCP e non un server Web, quindi non sarei in grado di ottenere effettivamente ciò che desideri. – boddhisattva

+0

Questo è quello che potrei creare come applicazione di chat: - http://boddhisattvadedicates.blogspot.in/2011/08/chat-application-using-ruby.html – boddhisattva

Problemi correlati