使用Ruby构建聊天应用程序

9nvpjoqh  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(145)

我正在尝试构建一个纯粹使用Ruby的聊天应用程序。有一个similar question张贴较早,但我有不同的和相关的查询。我看过this example(和之前发布类似问题的人提到的一样)。示例中的代码似乎对我不起作用。在终端上运行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中使用的东西)来重用示例中的代码,在浏览器示例中,用户可以输入他们的消息并通过单击按钮(也集成在浏览器中)来发布消息。这反映在各种客户端的所有其他浏览器示例中,聊天一直这样进行,直到用户输入字符串“quit”离开聊天室。
我不知道如何在Ruby中实现上述功能。

krugob8w

krugob8w1#

我猜这是你唯一用的密码HTTP(您的Web浏览器与服务器通信时使用的协议)的工作方式是,浏览器连接到您的服务器,发送一些行,说明它想要获取哪个页面,它有什么cookie等。然后服务器响应,并且在大多数情况下关闭连接。因此,在您的情况下,当您在Web浏览器中连接到聊天服务器时,浏览器连接,BasicServer#serve被调用,一些内容被发回,Web浏览器关闭连接,因此服务器无法向浏览器发送更多数据。解决这个问题最简单的方法是使用不同的方式连接到服务器(telnet或nc(netcat))。如果你想在浏览器中实现这一点,你需要让你的服务器响应HTTP请求,然后返回一个定期轮询服务器的页面(阅读AJAX或WebSockets)。你可以看看这篇文章来寻找灵感,尽管它不是用Ruby写的:https://github.com/ry/node_chat

相关问题