我正在用Ruby创建一个聊天客户端/服务器系统。
我的服务器将托管在笔记本电脑或其他设备上(这是一个类项目,所以不需要太多的处理能力),然后我计划让客户端在web浏览器中进行。
我将为它提供两个文本框的HTML :一个用户可以在其中键入,另一个将显示聊天历史记录。
我的问题是,虽然我可以轻松地将HTML代码提供给浏览器并让它显示聊天(导航到ip地址:端口),但我不知道如何将文本框中输入的内容返回给服务器。
有人知道我是怎么做到的吗?
发布于 2011-02-18 14:22:56
听起来你需要一个CGI工作原理的基本知识。一旦你知道了这一点,你会发现使用Sinatra,或者Padrino,Rails,或者使用其他语言会更容易。
这是一个非常基本的CGI。它生成一个简单的表单,按照您所说的内容,然后遍历web服务器传递给Ruby的环境表,按键排序,并按排序顺序输出表。大多数字段直接应用于web服务器本身或CGI,例如浏览器发送的查询,以及发送到服务器的标头,说明其功能:
#!/usr/bin/env ruby
puts "Content-Type: text/html"
puts
puts "<html><head><style type='text/css'>body{font-family: monospace;}</style></head><body>"
puts "<form name='foo' action='test_cgi.rb'>"
puts "<input type='textinput' name='inputbox'></input><br />"
puts "<textarea name='textareabox'></textarea><br />"
puts "<input type='submit'></input>"
puts "</form>"
puts "<h4>ENVIRONMENT:</h4>"
puts "<table>"
ENV.keys.sort.each do |k|
puts "<tr><td>#{k}</td><td>#{ENV[k]}</td></tr>"
end
puts "</table>"
puts "</body></html>"
复制该代码,将其存储到名为test_cgi.rb
的Ruby文件中,然后在该文件上设置可执行位。将该文件移动到计算机上web服务器的cgi-bin
目录中。使用浏览器访问该文件(http://localhost:8080/cgi-bin/test_cgi.rb
或类似文件),并在表单中输入不同的值并提交它们时,观察表中的输出发生变化。
一旦您理解了从服务器到浏览器再到服务器的往返过程,您就可以很好地了解Sinatra如何在Rack上构建,以提供比使用CGI自己完成更多功能更简单的功能。
发布于 2011-02-18 12:06:30
我建议使用像Sinatra这样的轻量级框架来处理这个问题。它很简单,不需要大量的阅读就可以快速完成任务,但也足够强大,可以根据需要显著扩展您的聊天应用程序。
使用基于web的客户端的缺点是,只有在客户端向服务器请求最新信息后,才会刷新聊天日志;即,在每次页面刷新时,而不是实时刷新。
你可以使用一些巧妙的Javascript (主要是XMLHTTPRequest)来定期请求新内容,就像Stack Overflow如何在你输入自己的答案时显示新答案一样。
https://stackoverflow.com/questions/5036280
复制相似问题