使用Ruby构建聊天应用程序

6
我正在尝试使用纯Ruby构建聊天应用程序。此前有一个类似的问题发布在Stack Overflow上,但我有不同且相关的疑问。我看了这个例子(与之前发布类似问题的人所引用的相同)。然而,该示例中的代码似乎对我无效。在终端上运行ruby脚本并在浏览器中连接到URL:http://localhost:1234后,我一直遇到“从localhost传输数据”的消息。

这里的1234是提供的示例中使用的端口号。我无法确定运行失败的原因。也许我需要在执行脚本时在命令行中指定某些内容,或者我应该通过其他地方(可能是浏览器)启动聊天(输入输出)。我无法确定具体该怎么做。你能帮我解决这个问题吗?

我基本上没有修改聊天服务器代码就运行了它。我在同一主机上运行Web服务和聊天服务器。

我已经部分地使代码在某些方面工作。下面是对我有效的修改后的代码。

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

对于每个浏览器实例,都会连接到聊天队列中(它们有唯一的客户端ID以进行识别)。我想通过在运行的浏览器实例中添加一个文本框(类似于我们在HTML中使用的内容),来重用示例中的代码。用户可以在其中输入他们的消息并通过单击按钮(也集成在浏览器中)发布它。这将反映在其他各种客户端的浏览器实例中,聊天就像这样继续进行,直到用户输入“退出”字符串离开聊天室。
我不确定如何在Ruby中实现上述功能,如果有建议或相关文章可供参考,将非常有帮助。
非常感谢!!
1个回答

4
我猜测这是你所使用的唯一代码。当你的网页浏览器与服务器进行通信时,HTTP协议(协议)的工作方式是,浏览器连接到你的服务器,发送一些指令,告诉服务器想要获取哪个页面,它有哪些Cookie等等。然后服务器做出响应并在大多数情况下关闭连接。因此,在你的情况下,当你在Web浏览器中连接到聊天服务器时,浏览器会连接,调用BasicServer#serve,返回一些东西,然后Web浏览器关闭连接,因此服务器无法将更多数据发送给Web浏览器。解决这个问题最简单的方法是使用不同的方法连接到你的服务器(如telnet或nc(netcat))。如果你想在浏览器中完成这个功能,你需要使服务器对HTTP请求做出响应,然后返回定期轮询服务器的页面(阅读有关AJAX或WebSockets的内容)。你可以参考以下内容,尽管它不是用Ruby编写:https://github.com/ry/node_chat

嗨,感谢您的耐心等待,也感谢您的回答!我意识到一段时间后,我实际上正在实现一个TCP服务器而不是Web服务器,因此我将无法实际获得所需的内容。 - boddhisattva
这是我能够构建的聊天应用程序:- http://boddhisattvadedicates.blogspot.in/2011/08/chat-application-using-ruby.html - boddhisattva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接