Uja*_*jan 5 ruby sockets tcp ruby-on-rails
总的来说,我是 Rails 和 Web 开发的完全初学者。我希望在 Rails 应用程序中实现 ruby TCPSocket 服务器,它将通过原始 tcp 连接接收来自客户端的数据,而无需使用 http 协议。该应用程序还将具有由 Rails 处理的其他功能。这可能吗?例如,这是一个可以在我的计算机上运行的简单服务器:
require 'socket'
server = TCPServer.new 3490
puts "waiting for connection"
client = server.accept
puts "client found"
while str=client.recv(100);
val=str.unpack("H*")
temp=val.join('').gsub('0','').to_i
#application specific code below
if temp<100
temp=temp*10
end
print "Temperature: "
puts temp*0.125
end
Run Code Online (Sandbox Code Playgroud)
我如何在 Rails 应用程序中实现此功能?任何形式的建议将不胜感激。
Rails 基本上是Rack应用程序,根据Rails 文档,
Rails.application是 Rails 应用程序的主要 Rack 应用程序对象。任何符合 Rack 标准的 Web 服务器都应该使用 Rails.application对象来为 Rails 应用程序提供服务。
由于 Rack 主要包装 HTTP 请求和响应,因此可能无法构建与 Rails Server 的基于纯 TCP IP 套接字的交互。
然而,您可能想看看Action Cable,它是 Rails 5 的新成员 - 它websockets与 Rails 应用程序集成。根据维基百科,
WebSocket 协议是一个独立的基于 TCP 的协议。它与 HTTP 的唯一关系是 HTTP 服务器将其握手解释为升级请求。
鉴于 Rails 主要是一个 Web 应用程序框架,如何提取 Action Cable 来与非浏览器客户端一起工作可能会很棘手。