3

ゲームサーバーを作っています。他のゲーム サーバーと同様に、サーバーはステートフルであるべきだと思います。(後で変更される可能性がありますが、現在、ステートフルなソリューションを探しています)

Rake でいくつか遊んだ後、Ruby で解決策を見つけることにしました。私が見つけているのは:

  • 実行時間の長い Ruby アプリに統合できる組み込み可能な HTTP サーバー ライブラリ。(インプロセス ライブラリ)
  • ベアボーン HTTP 要求/応答処理の処理をサポートする必要があります。装飾、URL ディスパッチ、または Web ページ テンプレートはありません。(私は決して必要としません)
  • ハードシングルスレッドモードを提供する必要があります。
  • 自己署名証明書で HTTPS をサポートする必要があります。
  • 信頼性が高く、本番環境で実証されています。
  • 素晴らしいドキュメントと大規模なコミュニティ。

最も似ている例は、に統合された HTTP サーバーだと思いますnode.js。基本的に、TCP ソケットの上の薄いレイヤーです。

マルチスレッドをサポートする必要はありません。CPU コアごとに別のプロセスを実行すると思いますが、迅速な開発が必要なため、マルチスレッドは現在回避する必要があります。

を探しましたがRack、単なるプロトコル仕様のようで、実際の実装ではありません。そして、ステートレス Web アプリのみのように見えます。そうでない場合は、修正してください。

では、Ruby ではこれらのものに対してどのようなオプションが利用できるのでしょうか?

4

3 に答える 3

4

あなたの質問を注意深く再評価した後、私は別の解決策を見つけたかもしれません。

おそらく、必要なのは単純なTCPソケットサーバーだけです。プリミティブHTTP1.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 サーバー カテゴリには、多くのオプションが表示されます。最も人気のあるサーバーは次のとおりです。

  • 薄い
  • Passenger (スタンドアロンまたは Apache Web サーバーで使用可能)
  • ユニコーン
  • 雑種

要件に関するいくつかの注意事項:

  • 「アプリケーションにサーバーを埋め込む」のではなく、「Web サーバーがアプリケーションを埋め込む」と考えると役に立ちます。
  • ほとんどの Ruby Web サーバーはそのように動作するため、本番環境では常にアプリケーションの複数のインスタンスが必要になります。(Ruby とその実装でのマルチスレッド化は難しいテーマなので)

個人的には、Thin と Passenger の両方を使用して大成功を収めています。「開発中は薄く、生産中はパッセンジャー」という組み合わせもよくあるようです。

PS: Web フレームワークについて言及していません。アプリケーションをできるだけ軽量にしたい場合でも、単純な Web フレームワークを使用すると、多くのボイラープレート コードを省くことができます。( Ruby ツールボックス: Web アプリ フレームワーク)

于 2013-03-03T08:52:49.707 に答える