2010-12-30 18 views
6

Estoy tratando de crear una aplicación de chat usando Ruby. Hay un similar question publicado anteriormente, pero tengo consultas diferentes y relacionadas. Miré this example (lo mismo que hace referencia la persona que publicó una pregunta similar anteriormente). El código en el ejemplo no parece estar funcionando para mí. Al ejecutar el script de ruby ​​en la terminal y al conectarme a la url: http://localhost:1234 en mi navegador, encuentro indefinidamente un mensaje de "Transferencia de datos desde el servidor local ...".Creando una aplicación de chat usando Ruby

Aquí 1234 es el número de puerto utilizado en el ejemplo proporcionado. No puedo descifrar cuál es el motivo de mi fallida ejecución. Puede ser que necesite especificar algo en la línea de comando mientras ejecuto el script o se supone que debo iniciar el chat (salida de entrada) a través de otro lugar (probablemente el navegador). No soy capaz de averiguar qué hacer exactamente. ¿Podrías por favor ayudarme con esto?

Estoy ejecutando el código del servidor de chat prácticamente sin modificaciones. Estoy ejecutando el servicio web y el servidor de chat en el mismo host.

Pude obtener parcialmente el código de trabajo para mí hasta el punto donde se inicia el ciclo. El código modificado que funcionó para mí hasta cierto punto se da a continuación.

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 

Por cada instancia de navegador, un nuevo cliente está conectado a la cola de chat (tienen identificadores de cliente únicos para identificarlos). Quería reutilizar el código en el ejemplo agregando un cuadro de texto (algo similar a lo que usamos en html) a la (s) instancia (s) del navegador que se ejecuta en donde un usuario puede ingresar su mensaje y publicarlo, digamos usando el clic de un botón (que también está integrado en el navegador). Esto se refleja en todas las demás instancias de navegador de varios clientes y el chat continúa así hasta que los usuarios ingresen una cadena "salir" para salir de la sala de chat.

No estoy seguro de cómo implementar la característica anterior también en Ruby, cualquier sugerencia o artículo relacionado sería de gran ayuda.

Muchas gracias!

Respuesta

4

Supongo que este es el único código que está usando. La forma en que funciona HTTP (el protocolo que usa el navegador web cuando habla con su servidor) es que el navegador se conecta a sus servidores, envía algunas líneas que le dicen qué página quiere obtener, qué cookies tiene, etc. El servidor responde, y en la mayoría de los casos, cierra la conexión. Entonces, en su caso, cuando se conecta al servidor de chat en su navegador web, el navegador se conecta, se llama al BasicServer#serve, se devuelve algo, y el navegador web cierra la conexión, por lo que el servidor no puede enviar más datos al navegador. La forma más fácil de "arreglar" esto es usar una forma diferente de conectarse a su servidor (ya sea telnet o nc (netcat)). Si desea que esto esté en un navegador, debe hacer que su servidor responda a las solicitudes HTTP, y luego devolver una página que sondee regularmente el servidor (lea en AJAX o WebSockets). Puede ver esto como fuente de inspiración, aunque no está escrito en Ruby: https://github.com/ry/node_chat.

+0

Hola ... gracias por ser paciente y también gracias por su respuesta .. !!. Después de un tiempo me di cuenta de que en realidad estaba implementando un servidor tcp y no un servidor web, por lo que no podría obtener lo que quería. – boddhisattva

+0

Esto es lo que podría construir como una aplicación de chat: - http://boddhisattvadedicates.blogspot.in/2011/08/chat-application-using-ruby.html – boddhisattva

Cuestiones relacionadas