ホームページ >バックエンド開発 >PHPチュートリアル >ソケットデータストレージの問題

ソケットデータストレージの問題

WBOY
WBOYオリジナル
2016-06-23 14:00:211119ブラウズ

現在、HTML5 WebSocket と PHP を使用してソケット接続を実装しており、長時間接続のゲームを作成する予定です
100 人程度のプレイヤーをサポートするサーバーを作成する予定です (その後、プレイヤー数を増やす予定です)。オンラインになります)、1 つの部屋/ゲームに 5 ~ 8 人が参加します。

ここで質問がありますが、現在のゲームデータはどこに保存できますか? (ゲーム結果データは、主にゲーム中間データが保存されるデータベースに保存されます)
グローバル変数:
グローバル変数への保存は確実に実現でき、パフォーマンスは最高です
ただし、プロセスがハングすると、現在のゲーム データの数はすべて消え、すべてのプレイヤーはゲーム ロビーからやり直す必要があります
redis:
プロセスがハングした場合、プレイヤーはプロセスが終了した後にゲームを続行できるはずです。
しかし、パフォーマンスはグローバル変数よりも明らかに悪いです、このように設計する必要があるかどうか知っていますか?
(現在、サーバーを 1 つだけレンタルする予定です。redis が同時にハングアップするかどうかはわかりません)

主な理由は、プロセスがハングアップする可能性がどのくらいか、影響がどのくらいかわからないためです。 Redis を使用するとパフォーマンスが低下します。
以前にこの機能を実行したことがあり、この分野での経験を共有できる人はいますか。


ディスカッション(解決策)への返信

投稿者の体験を楽しみにしています。

誰も答えなかったので、私は妥協案を考え出しました:
ゲームは最初にグローバル変数を使用して実装され、ハング防止拡張機能として Redis が使用されます。ゲームがオンラインになった後、サーバーがハングし、本当に必要な場合にのみ実装されます。
実装方法:
1. 同期計画: 各部屋の復元に必要なデータを個別に結合し、redis の別のフィールド ('room_'.$roomId という名前) に保存します
2. 同期時間: 1. ゲーム開始 ゲーム終了時に初期情報を保存 2. ゲーム終了時に情報をクリア 3. ゲームのラウンドごとにデータを保存
3. 復元計画: プロセス開始後、各ルームのデータを Redis に読み込みますそしてそれをグローバル変数に保存します。
とにかく、まずはグローバル変数を使って実装しましょう...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。