0

Rails を使用してオンラインのマルチプレイヤー ボード ゲームを作成しています。ページを手動で更新しなくてもゲームをプレイできるようにしたいと考えています。Websockets または Server Sent Events を使用してページを更新する予定です。どちらかはまだ決めていませんが、私の質問に違いがあるとは思いません。

私が混乱しているのは、いつクライアントに更新を送信するかを知ることです。たとえば、私がチェスをしていて、player1 が手番を行ったとします。彼らは移動をサーバーに送信し、サーバーはそれをデータベースに保存します。player2 の websocket または SSE は、player1 の移動に関する情報を player2 のブラウザにプッシュすることをどのように認識しますか?

データベースに定期的にクエリを実行して、ゲームが更新されたかどうかを確認できることはわかっていますが、すべてのユーザーが頻繁にデータベースにクエリを実行するため、スケーリングが難しいようです。

データベースの更新を待って、何らかの形で自動的に通知される簡単な方法はありますか? または、他の解決策はありますか?

これに対する解決策をオンラインでたくさん調べましたが、実際には具体的なアイデアは得られませんでした。無料である限り、問題を解決するためにライブラリなどを使用することに間違いなくオープンです。いくつかの有料ソリューションを見てきましたが、それらはオプションではありません。

また、レールと一緒にnode.jsを使用してリアルタイムで何かを行うことを誰かが提案しているのを見ました。node.js についてはよくわかりませんが、そのような非同期機能に適していると聞いたことがあります。どの Rails ソリューションよりも優れている場合は、その使用方法を学びたいと思います。

私は Rails 3.2 を使用していますが、Rails 4 でうまく機能するものがあれば、それにも興味があるでしょう。

4

2 に答える 2

2

nik が提案したように、Ruby 開発者の場合は FAYE Ruby Server を使用してください。

物事がどのように結びつくかという点では:

  1. 各ゲームはチャンネルです
  2. 各プレイヤーはこのチャンネルに登録します
  3. プレーヤーが手を動かすと、その動きがサーバーに送信されます
  4. サーバーはゲームに対する動きをデータベースに保存します
  5. サーバーはチャネルにメッセージを送信します。
  6. 両方のプレイヤーの UI が新しい動きで更新されます。

この設定により、ゲーム全体を簡単にリプレイしたり、中断したところから続行したりできます。データベースからすべての動きを取得し、新しいチャネルに順番に送信するだけです。これはパフォーマンスが良くないかもしれませんが、うまくいくはずです。

于 2013-05-13T10:10:19.290 に答える