2010-12-19 20 views
3

私はGoogle App EngineのチャンネルAPIで遊んで、http://rawkets.com/のようなリアルタイムのマルチプレイヤーゲームを作りました。このAPIは基本的に「一方向」(永続的なブラウザ間接続を有効にしないため)、約30秒で新しいAJAX POSTリクエスト(JQuery)を発行しています。Google App Engine:サーバーとの永続的な接続

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

アイデア?

+0

COMETについては、基本的にHTTPリクエストに似ていますが、サーバーの応答時間が非常に長い(接続を開いたままにしておく) –

答えて

0

ブロードキャストは、組み込みチャネルAPIを使用するとうまく動作しません(メーリングリストで何かが動作していると言われていますが)。

サードパーティの「実際の」ウェブソケットプロバイダをチェックアウトしたい場合があります。たとえば、http://pusherapp.comです。

1

長寿命接続の作成には2つの大きな問題があります。

  1. サーバーからストリームを出力することはできません。サーバーからストリームを受け取ることはできません。バッファされると、sent when the handler exitsとなります。
  2. お客様のご要望がunder 1,000msに返されない場合は、アプリはnot be auto-scaledになります。

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

30msごとに何をしようとしていますか?あなたは非常によく考え抜かれたデザインが必要です。ちょうどmemcacheの値を読み込んで設定するのはconsume close to half of that timeになります。データストアを照会する必要がある場合は、おそらくbe over thatでしょう。

0

これは単純にHTTPの仕組みではありません。あなたが望むものが(今後リリースされる)Websocket APIに近いと思われます。これは、ブラウザでは広くサポートされていないか、App Engineによってサポートされていません。

でも、1クライアントあたり30リクエストが特に不合理に高いようです。キーボード上の1人のユーザーが多くのイベントを生成することはできません。

関連する問題