3

http://rawkets.com/のようなリアルタイム マルチプレイヤー ゲームを作成するために、Google App Engine チャネル API をいじってみました。この API は基本的に "一方向" (ブラウザーからサーバーへの永続的な接続を有効にしない) であるため、新しい AJAX POST 要求 (JQuery) を約 30/秒で発行しています。

大きなオーバーヘッド (5 ~ 6kb/秒) が発生しているようですが、可能であれば削減したいと考えています。理想的には、30 秒未満 (appengine 要求のタイムアウト) しか持続せず、接続中は 30 ミリ秒ごとに新しいデータを送信し続ける接続を 1 つだけ作成したいと考えています。次に、サーバーはチャネル API を使用して、関連する他のすべてのクライアントに「言葉を広める」ことになります。これが意味をなすことを願っています!

何か案は?

4

3 に答える 3

1

自分で長期接続を作成するには、2 つの大きな問題があります。

  1. サーバーから出力をストリーミングすることはできません。出力はバッファリングされ、ハンドラーが終了したときに送信されます。
  2. リクエストが1,000 ミリ秒以内に返されない場合、アプリは自動スケーリングされません。

sje397 が言及しているように、Channel API は現在、一般的なブロードキャストをサポートしていません。独自のものを実装する必要があります。ただし、近くの複数のプレーヤーにプッシュしようとしているだけの場合は、独自のソリューションを実装しても問題ない場合があります。

30msごとに何をしようとしていますか? 非常によく考え抜かれた設計が必要です。memcache の値を読み取って設定するだけで、その時間の半分近くが費やされます。データストアにクエリを実行する必要がある場合は、おそらくそれ以上になるでしょう。

于 2010-12-19T18:40:44.263 に答える
0

ブロードキャストは、組み込みのチャネル API を使用するとうまく機能しません (ただし、メーリング リストで何かが進行中であると述べています)。

サードパーティの「実際の」Websockets プロバイダーをチェックアウトすることをお勧めします。たとえば、http://pusherapp.comです。

于 2010-12-19T13:09:57.237 に答える
0

これは単純に HTTP の仕組みではありません。ブラウザでまだ広くサポートされていない、または App Engine でまったくサポートされていない (近日公開予定の) websockets API に近いものが必要なようです。

それでも、クライアントごとに 1 秒あたり 30 リクエストというのは、特にばかげているように思えます。キーボード上の 1 人のユーザーがそれほど多くのイベントを生成できるわけではありません。

于 2010-12-19T23:09:46.400 に答える