2010-12-19 88 views
3

我一直在玩Google App Engine頻道API來創建類似於http://rawkets.com/的實時多人遊戲。由於這個API基本上是「單向的」(不支持持久的瀏覽器到服務器連接),我只需要以大約30秒的速度發佈新的AJAX POST請求(JQuery)。Google App Engine:瀏覽器到服務器的持續連接

它似乎產生一個大的開銷(5-6kb /秒),如果可能的話,我想減少這個開銷。理想情況下,我希望只創建一個持續少於30秒的連接(appengine請求超時),並在連接期間每30毫秒繼續發送一次新數據。然後,服務器將使用通道API將「傳播」給所有其他相關客戶端。希望這是有道理的!

任何想法?

+0

閱讀關於COMET,這基本上就像一個HTTP請求,除了服務器需要很長的響應時間(即保持連接打開) – 2011-07-05 06:54:02

回答

0

使用內置的頻道API(儘管他們在郵件列表中說有些東西正在播放),廣播效果不佳。

您可能想查看第三方「真實」websockets提供商。例如,http://pusherapp.com

1

您自己創建長期連接有兩個主要問題。

  1. 您不能從服務器流式輸出,它將被緩衝,然後sent when the handler exits
  2. 如果您的請求未在under 1,000ms中返回,您的應用程序將爲not be auto-scaled

正如sje397所提到的,Channel API目前不支持廣播 - 您需要實現自己的廣播。但是,如果您只是試圖推動附近的幾個玩家,那麼實施您自己的解決方案可能不是問題。

你每30毫秒試圖做什麼?您需要一個非常深思熟慮的設計,只需閱讀並在memcache中設置值即可達到consume close to half of that time。如果您需要查詢數據存儲區,則可能需要be over that

0

這不僅僅是HTTP的工作原理 - 它聽起來像你想要的更接近(即將發佈的)websockets API,目前尚未在瀏覽器中得到廣泛支持,或者由App Engine完全支持。

儘管如此,每客戶端每秒30個請求似乎特別荒謬 - 鍵盤上的單個用戶無法生成許多事件。

相關問題