3

我正在制作一些游戏服务器。就像任何其他游戏服务器一样,我认为服务器应该是有状态的。(以后可能会改变,但目前我正在寻找有状态的解决方案)

在玩了一些 Rake 之后,我决定在 Ruby 中找到解决方案。我发现的是:

  • 一个可嵌入的 HTTP 服务器库,可以集成长时间运行的 Ruby 应用程序。(进程内库)
  • 应该支持处理简单的 HTTP 请求/响应处理。没有装饰、URL 调度或网页模板。(我从不需要)
  • 应该提供硬单线程模式。
  • 应该支持带有自签名证书的 HTTPS。
  • 可靠,并在生产中得到验证。
  • 不错的文档和大型社区。

我认为最类似的例子是 HTTP 服务器集成到node.js. 基本上是 TCP 套接字之上的一个薄层。

它不需要支持多线程。我认为我将为每个 CPU 内核运行单独的进程,并且我需要快速开发,因此目前要回避多线程。

我一直在寻找Rack,它似乎只是一个协议规范,而不是实际的实现。它看起来只适用于无状态网络应用程序。如果不是,请纠正我。

那么,在 Ruby 中这些东西有哪些可用的选项呢?

4

3 回答 3

4

在仔细重新评估您的问题后,我可能找到了另一种解决方案。

也许您唯一需要的就是一个简单的TCP 套接字服务器。一个原始的 HTTP 1.0 服务器可以使用 Ruby 核心类来完成,如下所示:

require 'socket'

server = TCPServer.open(80)
loop do
  client = server.accept

  response = "<html>...</html>"
  headers = ["HTTP/1.0 200 OK",
             "Content-Type: text/html",
             "Content-Length: #{response.length}"].join("\r\n")

  client.puts headers
  client.puts "\r\n\r\n"
  client.puts response

  client.close
end

看看这些资源:

于 2013-03-04T09:43:50.087 回答
2

一般来说,如果您想知道“关于 [...],我在 Ruby 中的选择是什么”,您最好的资源是The Ruby Toolbox

Web 服务器类别显示了许多选项。最受欢迎的服务器是:

  • 薄的
  • 乘客(可以独立使用或与 Apache Web 服务器一起使用)
  • 独角兽
  • 杂种

关于您的要求的几点说明:

  • 如果认为“Web 服务器嵌入了我的应用程序”而不是“我将服务器嵌入到我的应用程序中”会有所帮助。
  • 在生产环境中,您总是需要应用程序的多个实例,因为大多数 Ruby Web 服务器都是这样工作的。(因为 Ruby 中的多线程及其实现是一个棘手的主题

就我个人而言,我使用 Thin 和Passenger 都取得了巨大的成功。“开发时瘦,生产时乘客”的组合似乎也很常见。

PS:你没有提到任何网络框架。即使您想让您的应用程序尽可能轻量级,一个简单的 Web 框架也可以为您节省大量样板代码。(Ruby 工具箱:Web 应用程序框架

于 2013-03-03T08:52:49.707 回答
0

如果您正在寻找一种简单的方法来回答主要不是 Web 服务器(例如用于调试)的 Ruby 进程中的一些 HTTP 查询,那么到目前为止,WEBrick 对我来说似乎不错。

https://docs.ruby-lang.org/en/2.1.0/WEBrick.html

require 'webrick'

server = WEBrick::HTTPServer.new(Port: 8000)
server.mount_proc '/some_useful_query' do |req, res|
    res.status = 200
    res.body = 'Hello, world!'
end
Thread.new {
    server.start
}
于 2019-08-09T06:49:57.700 回答