如何在rails应用程序中实现tcp套接字?

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 应用程序中实现此功能?任何形式的建议将不胜感激。

Wan*_*ker 3

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 来与非浏览器客户端一起工作可能会很棘手。