2

Google App Engineは最近、チャンネル作成の無料割り当てを1日あたり8640から100に大幅に減らしたようです。有料プランを使いたくない趣味のプロジェクトのために、チャンネル作成を最適化するためのいくつかの提案をいただければ幸いです。

  1. ドキュメントには、チャネルIDごとに1つのクライアントしか存在できないことが具体的に記載されています。1台のコンピューター上の複数のクライアント(複数のタブなど)のみを対象とした場合でも、これを回避する方法があれば役立ちます。

  2. XHRリクエストをサーバーに繰り返し送信して新しいメッセージをチェックし、制限をバイパスすることで、チャネル機能をシミュレートできる可能性があることに気付きました。ただし、この方法は遅すぎるのではないかと心配しています。この原則に基づいて機能する既存のライブラリはありますか?

4

1 に答える 1

5

チャネルごとに1つのクライアント

残念ながら、チャネルIDごとに1つのクライアントを制限する簡単な方法はありません。実際には2つ許可していますが、これはユーザーがページを更新する場合を処理するためのものであり、実際のファンアウトではありません。

そうは言っても、これに対する独自の回避策を確実に実装できます。私が見たトリックの1つは、Cookieを使用してブラウザのタブ間で通信することです。次に、チャネルの「所有者」を1つのタブで選択し、Cookieを介してデータをファンアウトできます。タブ間通信を実装する方法については、この質問を参照してください:ブラウザのタブ/ウィンドウ間のJavascript通信

ポーリングとチャネル

パフォーマンスのトレードオフを受け入れる場合は、ChannelAPIを使用する代わりにポーリングすることができます。チャネルAPIの配信速度は100〜200ミリ秒のオーダーです。平均500ミリ秒を受け入れることができれば、毎秒ポーリングできます。送信するデータのタイプ、およびmemcacheに収めることができる量によっては、これが実行可能なソリューションになる場合があります。私の推測では、あなたの最大の問題はインスタンス時間になるでしょう。

たとえば、たとえば100のクライアントがある場合、100qpsを見ていることになります。2番目のインスタンスを起動せずに、処理する必要のあるデータに対して1秒間に100個のリクエストを処理できるかどうかを実験して確認する必要があります。そうでない場合は、リクエストを処理できるインスタンスが1つになるまで、レイテンシを増やし続けます(つまり、ポーリング頻度を減らします)。

お役に立てば幸いです。

于 2011-12-01T15:17:14.523 に答える