我需要的應用程序,需要經常輪詢服務器,但GAE對請求的限制,因此使得大量的請求可能是非常昂貴的。是否有可能使用長輪詢和請求等待最多30秒進行更改?Google App Engine中可以進行長時間輪詢嗎?
回答
谷歌AppEngine上有一個新的功能頻道API,與你有 一個possibility to build a good realtime application。
另一種解決方案是使用一個第三部分彗星服務器像了Mochiweb 或具有IFRAME圖案扭曲。
客戶端1,等待一個事件:
client1 --Iframe Pattern--> Erlang/Mochiweb(HttpLongPolling):
客戶機2,發送消息:
client2 --XhrIo--> AppEngine --UrlFetch--> Erlang/Mochiweb
使用帶有彗星圖案了Mochiweb,理查德·瓊斯寫了一個良好的 主題(在谷歌:理查德瓊斯百萬用戶彗星應用程序)。
我不認爲長輪詢是可能的。 google appengine的默認請求超時時間爲30秒。 在長時間輪詢中,如果消息的生成時間超過30秒,則會失敗。 你可能使用短輪詢更好。
另一種方法是「模擬」長輪詢withing的30秒的限制。要做到這一點,如果消息沒有到達,例如20秒,服務器可以發送一個「令牌」消息,而不是正常的消息,要求客戶端使用它並再次連接。
似乎有feature request(和它的接受)在谷歌AppEngine上的長輪詢
Google App Engine現在擁有Channel API來支持長輪詢。 – 2012-12-18 10:04:09
@檢查問題發佈和回答的時間,然後長輪詢是不可能的。 – naikus 2012-12-19 10:57:50
哎呀,我的壞... – 2012-12-29 10:06:55
我們試圖實現在App Engine類似彗星的長輪詢的解決方案,但結果喜憂參半。
def wait_for_update(request, blob):
"""
Wait for blob update, if wait option specified in query string.
Otherwise, return 304 Not Modified.
"""
wait = request.GET.get('wait', '')
if not wait.isdigit():
return blob
start = time.time()
deadline = start + int(wait)
original_sha1 = blob.sha1
try:
while time.time() < deadline:
# Sleep one or two seconds.
elapsed = time.time() - start
time.sleep(1 if elapsed < 7 else 2)
# Try to read updated blob from memcache.
logging.info("Checking memcache for blob update after %.1fs",
elapsed)
blob = Blob.cache_get_by_key_name(request.key_name)
# Detect changes.
if blob is None or blob.sha1 != original_sha1:
break
except DeadlineExceededError:
logging.info("Caught DeadlineExceededError after %.1fs",
time.time() - start)
return blob
我看到的問題是,下面的請求長輪詢之一,越來越連載(同步)長輪詢請求後面。我可以在Chrome瀏覽器中查看一個跟蹤並看到如下時間線:
- 請求1發送。 GET(未修改)blob(等到更改)。
- 請求2發送。修改blob。
- 充滿後超時,請求1點返回(數據未修飾的)。
- 請求2在服務器上得到處理,並返回成功。
我已經使用wireshark和Chrome /時間線來確認我AM發送修改請求到服務器上的一個獨立的TCP連接從長輪詢之一。因此,這種同步必須在App Engine生產服務器上進行。就我所知,Google沒有記錄服務器行爲的這些細節。
我認爲等待渠道API是我們獲得App Engine良好實時行爲的最大希望。
- 1. 避免對Heroku和Google App Engine等服務進行輪詢?
- 2. Google App Engine Cron時間表和長度
- 3. 是否可以使用XPages進行長時間輪詢?
- 4. 我可以在Google App Engine PHP運行時上運行CakePHP嗎?
- 5. 管理Google App Engine中的長時間運行任務
- 6. 在asp.net/angularjs中長時間運行進程的輪詢進度
- 7. 'Google App Engine'遠比'Google Compute Engine'貴嗎?
- 8. 長時間在App Engine中的cron
- 9. Google App Engine - 訪問html頁面時可以啓動jvm嗎?
- 10. 使用EventMachine的Rails應用程序是否可以進行長時間輪詢?
- 11. 在Google App Engine應用程序之間進行通信時,我需要SSL嗎?
- 12. Google雲端硬盤可以與Google App Engine UserService集成嗎?
- 13. Geocell和Google App Engine空間查詢
- 14. Google App Engine超時?
- 15. 我可以在Google App Engine中使用JavaCompiler嗎?
- 16. 我可以在Google App Engine應用程序中使用facelets嗎?
- 17. 在Google App Engine中,類可以是Expando和Polymodel嗎?
- 18. 我可以在Google App Engine模塊中使用TensorFlow嗎?
- 19. 我可以在Google App Engine中使用TA-Lib嗎?
- 20. 我可以在Google App Engine中使用JPA 2.0嗎?
- 21. 我可以在Google App Engine中使用Django的郵件API嗎?
- 22. 動態後端可以在Google App Engine中動態啓動嗎?
- 23. Google App Engine支持xlrd嗎?
- 24. Google App Engine需要Hibernate嗎?
- 25. Google App Engine適合我嗎?
- 26. Google App Engine HRD遷移需要多長時間?
- 27. 在Google App Engine上計算的最長時間
- 28. Google App Engine地理查詢
- 29. Google App Engine:查詢用戶?
渠道API尚未公開。以下是另外兩種可供選擇的服務: http://beaconpush.com http://pubnub.com – 2010-09-01 23:04:29
注意:Channel API將於2017年10月停止使用並關閉。 – Suma 2017-07-28 11:32:21