我正在尝试使用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中使用的文本框)来重用示例中的代码,其中用户可以输入他们的消息并发布它说使用点击一个按钮(也集成在浏览器中)。这反映在各种客户端的所有其他浏览器实例中,聊天继续进行,直到用户输入字符串“退出”离开聊天室。
我不确定如何在Ruby中实现上述功能,任何建议或相关文章都会非常有用。
非常感谢!!
答案 0 :(得分:4)
我猜这是你正在使用的唯一代码。 HTTP(您的Web浏览器与您的服务器通信时使用的协议)的工作方式是,浏览器连接到您的服务器,发送一些行说明它想要获取哪个页面,它有哪些cookie等等。然后服务器响应,在大多数情况下,关闭连接。因此,在您的情况下,当您在Web浏览器中连接到聊天服务器时,浏览器会连接,调用BasicServer#serve
,发回一些内容,Web浏览器关闭连接,因此服务器无法发送更多数据到浏览器。 “修复”这个的最简单方法是使用不同的方式连接到服务器(telnet或nc(netcat))。如果您希望将其放在浏览器中,则需要让服务器响应HTTP请求,然后返回定期轮询服务器的页面(在AJAX或WebSockets上读取)。你可以看一下灵感,虽然它不是用Ruby编写的:https://github.com/ry/node_chat。