0

私のゲームはターン制ですが、チャットなどのリアルタイム要素があるため、スピードが求められます。1 つのサーバーで数千人のオンライン プレーヤーをサポートするのが理想的です。

データセットが大量のデータをメモリに保存する傾向があることは知っていますが、ミリ秒ごとに db 呼び出しを 2 回行う必要がないようにするために必要なことだと考えました。私は Entity Framework から遠ざかっています。なぜなら、内部で何が起こっているかをあまり制御できないように思われるからです。

今、私はこれらのどちらも (一般的には c# も) 人生でこれまでに存在した中で最も驚くほど高速なソリューションではないことを知っていますが、少し便利なものが必要です.

ところで、.Net 4.0 は他のいくつかのあいまいな依存関係のために簡単に使用できません。それらは修正される可能性がありますが、正直なところ、それを理解するために時間を費やす気はありません. 私はむしろ、私の依存関係がうまく機能する3.5に固執しています。

4

3 に答える 3

3

私はデータベースのバックエンドでゲームをしました。

賢明な言葉: リアルタイム ゲームでキャッシュを更新することは困難です。プレイヤーは常に対話します。すべてのプレイヤーを同じサーバーに配置するかどうかを検討する必要があります。そうであれば、キャッシュは簡単ですが、成長が制限されます。そうでない場合は、どうすれば人々が同じサーバー上で対話し続けることができるかを考えてください。たとえば、チャット サーバーはチャットの問題を解決します。ただし、地域がある場合は、世界の地域ごとにセグメント化したい場合があります。そうでない場合は、プレイヤーのグループを保持したい場合があります。また、異なるゲーム インスタンスがある場合は、それによってセグメント化することができます。

もう 1 つの問題はロックです。プレーヤーは、別のプレーヤーが更新している同じデータにアクセスする可能性があります。ほとんどの場合、トランザクション分離レベルに対処する必要があります。つまり、コミットされていない読み取りはロックに役立ちます。このために、ADO はより詳細な制御を提供します。

ただし、EF を使用すると、よりクリーンな更新コードを記述できます。また、ID で更新する場合でもパフォーマンスは変わりません。

ADO を介して読み取り、EF を介して書き込みます。下で ADO を使用するトランザクション db コンテキストを作成することもできます。そうすれば、それらは似ていますが、バックグラウンドで異なることを行います。

私の考えですが、これが解決策を理解するのに役立つことを願っています。

于 2013-05-15T19:52:49.710 に答える
0

唯一の問題がチャットであ​​る場合は、メッセージングとブレッドキャスティングを提供する外部クラウド システムを使用して、さまざまな種類のソリューションを選択できます...

このリンクをチェックしてください: http://www.pubnub.com/solutions/how-pubnub-works

私が何らかの形で助けてくれることを願った

于 2013-05-15T18:56:19.527 に答える