0

私は、数十万人のユーザーにスケールアウトする予定のゲーム プラットフォームをサポートするインフラストラクチャを構築中です。これはエンターテイメント/ゲーム業界であるため、各ユーザー セッションから大きな負荷がかかることが予想されるため、パフォーマンスが最も重要です。

可能な限り多くのアーキテクチャを並列化しようとしています。つまり、API、データベース、およびアプリケーションは、水平方向にスケーリングできるさまざまなサーバーから実行されます。アプリケーションの 1 つは Web アプリであり、従来のブラウザーでの同じオリジン ポリシーに関係する特定のシナリオが原因で、これに関して最も問題が発生しています。

Web ブラウザーで実行されるこのアプリケーションは、集中型 API を介してのみ利用可能なモデルへの迅速なアクセスを必要とします。これは専用のモバイル クライアントには最適ですが、残念ながら、ブラウザーは API と直接やり取りするために CORS を完全にサポートする必要があります。一部の HTTP 動詞はすべてのブラウザー (put / delete) でサポートされていないため、これは問題です。既知の唯一の回避策は、API を書き直してより抽象化することです (これはベスト プラクティスではなく、開発時間が長くなり、パフォーマンスが向上する可能性があると考えています)。JSONP を使用して POST のみで作業するか、プロキシを作成します (余分な 2 つのレグを追加します)。遅延パフォーマンスを 2 倍にします)。

要するに、この質問を要約すると、これらの 2 つのオプションしかないのか、それとも考慮していないものが他にあるのか、もしそうなら、これらのソリューションのどれがゲーム プラットフォームにより適しているのかということです。

4

3 に答える 3

0

JSONP は確かに「ユニバーサル」サポートを備えていますが、それでも少しハックであり、いくつかのマイナスの副作用があります。主に、エラーをキャプチャできないことです。

JSONP がどこでも機能する理由は、script タグによって行われたリクエストが、CORS 仕様で定義されている「単純なリクエスト」の範囲内にあるためです。

私のポイント?JSONP を使用する代わりに、単純な要求の範囲内に収まるように API (または少なくともその最も一般的にアクセスされる部分) を変更することもできます。これにより、プリフライト リクエストのパフォーマンスへの影響なしに、エラーを完全に処理できるようになります。

プリフライト リクエストを使用する必要がある場所については、プリフライト レスポンスをキャッシュできます。

この手法については、Two Strategies for Crossing Origins with Performance in Mind で詳しく説明しています。

于 2016-01-14T16:56:10.170 に答える