ホームページ >バックエンド開発 >PHPチュートリアル >ソケットデータストレージの問題
現在、HTML5 WebSocket と PHP を使用してソケット接続を実装しており、長時間接続のゲームを作成する予定です
100 人程度のプレイヤーをサポートするサーバーを作成する予定です (その後、プレイヤー数を増やす予定です)。オンラインになります)、1 つの部屋/ゲームに 5 ~ 8 人が参加します。
ここで質問がありますが、現在のゲームデータはどこに保存できますか? (ゲーム結果データは、主にゲーム中間データが保存されるデータベースに保存されます)
グローバル変数:
グローバル変数への保存は確実に実現でき、パフォーマンスは最高です
ただし、プロセスがハングすると、現在のゲーム データの数はすべて消え、すべてのプレイヤーはゲーム ロビーからやり直す必要があります
redis:
プロセスがハングした場合、プレイヤーはプロセスが終了した後にゲームを続行できるはずです。
しかし、パフォーマンスはグローバル変数よりも明らかに悪いです、このように設計する必要があるかどうか知っていますか?
(現在、サーバーを 1 つだけレンタルする予定です。redis が同時にハングアップするかどうかはわかりません)
主な理由は、プロセスがハングアップする可能性がどのくらいか、影響がどのくらいかわからないためです。 Redis を使用するとパフォーマンスが低下します。
以前にこの機能を実行したことがあり、この分野での経験を共有できる人はいますか。
投稿者の体験を楽しみにしています。
誰も答えなかったので、私は妥協案を考え出しました:
ゲームは最初にグローバル変数を使用して実装され、ハング防止拡張機能として Redis が使用されます。ゲームがオンラインになった後、サーバーがハングし、本当に必要な場合にのみ実装されます。
実装方法:
1. 同期計画: 各部屋の復元に必要なデータを個別に結合し、redis の別のフィールド ('room_'.$roomId という名前) に保存します
2. 同期時間: 1. ゲーム開始 ゲーム終了時に初期情報を保存 2. ゲーム終了時に情報をクリア 3. ゲームのラウンドごとにデータを保存
3. 復元計画: プロセス開始後、各ルームのデータを Redis に読み込みますそしてそれをグローバル変数に保存します。
とにかく、まずはグローバル変数を使って実装しましょう...