4

Erlangを使用してゲームサーバーを構築しているとします。

各ユーザーが何かをチェックすること(たとえば、最も近いプレーヤーを見つけること)は非常に一般的な循環であるため、通常、そのためのマネージャークラスがあります。

上記の場合、ミューテックスロックを使用します。

私が知っているように、Erlangは通常、TCP接続(ユーザーセッション)ごとに新しいErlangプロセスを作成します。では、ユーザーセッションのリストをどのように回覧することができますか?

それらのユーザーセッションの親プロセスがあり、親プロセスに依頼した場合、それはボトルネックになる可能性がありますか?

4

1 に答える 1

12

さて、先に進む前に、次の質問と回答を見てください: Erlang: 配列上の分散作業, Erlang gen_server with long-running tasks、およびErlang を使用した最適で最も効率的なクライアント プール手法とは何かここでは、 ETS テーブルMnesiaについて学びます。次に、おそらくGProcを見ることができます。特にゲームの状態データを保持するプロセスを作成すると、プロセスが終了したときに状態が失われる可能性があるため、危険です。クラッシュしたプロセスを再開するのは簡単ですが、保持していたデータは失われます。通常、erlang VM 全体がダウンしない限り失われないメモリ内データ ストレージが必要です (この場合、RAM を超えた永続性が必要な場合は、DETS テーブルまたは Mnesia が必要になります)。



通常、プロセス ディクショナリは推奨されませんが、それでも非常に有用であることが証明されています。しかし、個人的には、ETS テーブルは私を大いに救ってくれました。それらは、クラッシュしているあるプロセスから次の生きているプロセスに転送される可能性があります。ディスクにダンプしたり、ディスクからロードしたりでき、大量のデータを処理できます。

Erlang で使用される IN-Memory ストレージについてもっと勉強してください。そのところで、Memcached、Raik、CouchBase などの erlang VM の外部のストレージを使用することも可能ですが、場合によっては、ゲームをQueues、またはListsまたはRecordsのようなデータ構造に分解することができます。プロセス ディクショナリ内に保存されます。また、クライアントへのゲーム サービスがどのようにレンダリングされるかによっても異なります。ゲームが HTTP (RESTFUL) を使用している場合、適用する Erlang ライブラリ ( Mochiweb、Yawsなど) も学習します。このチュートリアル全体に従うだけで、すべてを発見できます。

于 2012-07-05T12:56:42.057 に答える