2

私は現在、自分のプロジェクトの実績システムを計画しています。ユーザーが実際にアチーブメント ページにアクセスすると、アチーブメントのロックが解除され、未完了のアチーブメントには進行状況が表示されます。

一部のアチーブメントの進行状況の計算には時間がかかる場合があります。私はこのアイデアを思いつきましたが、それを実装する方法、またはそれが可能かどうかさえわかりません:

  • JavaScript は AJAX 経由で実績データをリクエストします
  • PHP が達成度の計算を開始
  • 実績ごとに、次の形式の行が出力ストリームに書き込まれます。ID:progress
  • JavaScript は各行を受け取り、指定された実績の進行状況を表示します

responseText最後に一度にすべてではなく、到着時にAJAXに1行ずつ読み取らせるにはどうすればよいですか?


さらに、可能であれば、PHP を次のようにスレッド化したいと考えています。

  • 各実績について:
    • N 個を超える「スレッド」がある場合は、1 つが終了するまで待ちます
    • スレッドを分岐して現在の実績を計算し、結果行をエコーする

そのようなことはPHPで可能ですか?


それとも、私はこれを完全に間違った方法で行っていますか? 実績のグループごとに AJAX リクエストを送信するだけでよいですか? それとも実績ごとに 1 つですか?代替案として何を提案しますか?

4

1 に答える 1

3

クライアント上のXHR2 Progress Eventsとサーバー上のHTTP Chunked Transfer Encodingを組み合わせて使用​​することにより、最新の ES5 ブラウザーでこれを実現できます。このスタック オーバーフローの投稿で詳しく説明しています。

個人的には、このアプローチは少し過剰に設計されていると思います。初めてプレーヤーの実績を取得するのに数秒もかからない場合 (一定期間内の後続のリクエストのためにキャッシュすることを前提としています)、プレーヤーがダウンロードしてこれを最適化する間、プレーヤーを待機させます。一度私はそれを保証するのに十分なユーザーを持っていました:)

于 2013-03-23T15:39:39.180 に答える