リアルタイムマルチプレイヤー用のJavaScriptとPHP [閉まっている]


13

JavascriptクライアントサイドとPHP / mysqlサーバーサイドを組み合わせることは、HTML5リアルタイムマルチプレイヤー(小規模)ブラウザーゲームにとって良いアイデアだろうか?

私の技術的な知識は非常に限られており、将来node.jsを学習することを計画していても、学習曲線は今のところかなり大きいです。

私はすでにPHPに精通しているので、はるかに高速に機能すると思います。

私が考えている規模は、当時2〜8人のプレーヤーです。また、クライアントからサーバーへのメッセージ数を可能な限り少なくしようとしています。

格納/処理する値は次のとおりです。

  • プレイヤー名とID。
  • XおよびY位置。
  • 健康。
  • 装備アイテム(最大8スロット、おそらくそれ以下)。
  • アクション(歩行、攻撃、使用など。ただし、一度に1アクション/プレイヤーのみ)。
  • 箇条書きのX、Y座標と軌跡。
  • ギルド/クラン名。
  • そして、いくつかの基本的なチャット/メール機能。

私の推測では最良の解決策ではありませんが、ロジックを小さく保つ限り、これは完全に実行可能です。私は正しいですか?


4
完全に実行可能に聞こえます。試してみませんか?最悪の場合、あなたは学習に時間を費やし、最良の場合、あなたが望むものを正確に手に入れます。
ウィリアムマリアガー

1
ええ、しかし、これには作成に時間がかかると思います。時間を無駄にしたくないので、ここで尋ねました。=)
justanotherhobbyist

8
何かを学べば、時間は無駄になりませんでした。;)検討する価値のあることは、言語を切り替える、新しい言語の学習とネットワークの学習に同時に時間を費やすことになります。あなたが知っていることに固執するなら、最初にネットワーキングを学び、次にそれが非効率であることが判明した場合、それを移植することができます。
ウィリアムマリアガー

1
それは実際に良い点です
-justanotherhobbyist

回答:


12

リアルタイムゲームでは、待ち時間を最小限に抑える必要があります。これを実現するための2つのヒントを、PHPとNodeに関するメモとともに示します。

  1. WebSocketを使用します。これらは、サーバーとクライアント間の高速の双方向通信を可能にします。ここでnode.jsを使用すると、パイプの両端で同じJavaScript APIを使用できるという利点があります。また、node.js用の素晴らしいsocket.ioモジュールもあり、WebSocketをサポートしない下位ブラウザーにフォールバックテクノロジーを提供します。少しグーグルで、本当にしたい場合は、PHPのWebSocketsも使用できるようです。
  2. 高速で移動するオブジェクトの座標など、タイムクリティカルなデータにデータベースを含めないでください。これは、それらをメモリに保持することを意味します。これは、Apache(または任意のWebサーバー)へのリクエストごとに1回起動する従来のPHP使用モデルには特に適していませんが、スタンドアロンとしてPHPサーバーアプリを起動することもできます。推測するNodeは、V8コアで、PHPよりも高速になるます。それが問題であるかどうかは、ゲームの要求度とサーバーの性能に依存します。

私自身、node.jsの取得は非常に簡単であり、とにかくかなりの量のJavaScriptをコーディングする必要があるため、試してみることをお勧めします。少なくともsocket.ioのチュートリアルをざっと見て、リアルタイム通信チャネルのセットアップがいかに簡単かを確認してください。


ポイント2の+1。これで最も大きな間違いは、各イベントでMySQLクエリが起動することです。ゲームデータをHDDから移動するためにできることは何でも役立ちます。このためにMemcachedを悪用して成功しました。間違いなく他の方法があります。
DampeS8N

ええ、私は本当にノードを学びたいと思っていますが、私はまだcmdから開始することはできません。開発者が犯した最大の間違いは、それを非常に難しくすることでした。少なくともWindowsバージョンにはインストーラーが付属していますが、良いチュートリアルを見つけたら試してみるかもしれません。
-justanotherhobbyist

ノードの起動や使用はまったく難しくありません。PHPよりも難しいのは確かですが、PHPはその利便性のためにひどい代価を払っています-Apacheに組み込み、デフォルトで設定なしでどこにでも組み込むことができる設計は、PHPを完全かつ絶対に最悪の選択にする多くの問題を引き起こしますリアルタイムのゲームバックエンドを作成できます。Node、Python、Ruby、Javaなどはすべてアプリサーバーを設定する必要がありますが、そのモデルではPHPで実現するのは文字通り不可能な、非常にスケーラブルなイベント駆動型のインメモリ処理が可能です。
ショーンミドルディッチ

1

Tapioの回答に加えて、サーバーへのユーザー入力(クリックとキーボード入力)のみ(可能な場合)を送信し、サーバーとクライアントの両方にゲームをエミュレートさせることをお勧めします。Nティックごとにクライアントがサーバーに同期を要求し、サーバーはクライアントがゲームのレンダリングに必要なすべての情報(健康、アイテムなど)で応答します。これは、クライアントも非同期化されないようにするためです。ずっと。

もちろん、サーバーとクライアントの両方がまったく同じゲームの実装を持っている必要があるので、これはもう少し作業になるかもしれません。クライアントとサーバーの両方に完全な実装がある場合、クライアントはあまり頻繁に同期する必要がありません。

これにより、クライアント/サーバーメッセージングが削減され、待ち時間が短縮されます。これは、不正行為の防止にも役立ちます。

このゲームをJavaScriptで作成していると仮定すると、NodeJSを使用して、JavaScriptでバックエンドを作成する価値があるかもしれません。これにより、サーバーとクライアントの両方でゲームのJavaScript実装を再利用できます。


0

Nodejsを学ぶことをお勧めします。すでにJavascriptを使用している場合、それほど難しくありません。NodejsでTRONマルチプレイヤーゲームをすばやく作成し、それを使用したのは初めてでした。(ああ、クライアントはHTML5キャンバスでした。他のコメントで述べたように、キー入力のみを送信していました。)

nowjsと呼ばれるモジュールを見てください。幸運を!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.