2014-10-10 107 views
1

我正在構建一個安裝程序,該安裝程序將運行數天,並且需要實時從GMail收件箱收到通知。 Gmail API非常適合我需要的許多功能,所以我想使用它。但是,它沒有像IMAP那樣的IDLE命令。使用GMail API進行長輪詢

現在我已經創建了一個GMail API實現,每隔幾秒輪詢郵箱。這很好,但一段時間後超時(我得到「由同伴重置連接」)。那麼,關閉sesson並每隔半小時重新啓動一次以保持活動狀態(如IDLE)是否合理?這是一種可怕的,可怕的黑客,會讓谷歌在半夜打開我的門?

合適的解決方案是否可以使用IMAP登錄並使用IDLE通知我的GMail API模塊啓動並在發生變化時進行更改?或者我應該吸收它並創建一個僅用於IMAP的實現?

回答

3

肯定會推薦反對IMAP,請注意,即使使用IMAP IDLE命令,它也不是實時 - 它只是在封面下每隔幾(5?)秒輪詢一次,然後推送到連接。 (試驗自己,看看那裏的延遲。)

查詢history.list()通常很便宜,應該沒問題。如果這是針對相當數量的用戶,那麼您可能希望進行一些優化,如非活動郵箱的智能退避(例如,每次沒有更新回退5秒鐘,最多可達1分鐘或2分鐘時)。

谷歌絕對不會破壞你的門,或者甚至可能會注意到,除非你每秒用1M用戶做它。 :)

API的真正推送通知絕對是需要的東西。

+0

太棒了!這正是我正在做的!我非常有興趣聽說IDLE也不是真正的推動者。 看起來好像「連接重置對等」選項可能只是主機進入休眠狀態。需要更多的測試。 – mysteryDate 2014-10-14 16:07:22

+0

奇怪的是,我是否需要每隔幾分鐘對顯示器進行細分/重建,例如IMAP IDLE?有什麼理由嗎? – mysteryDate 2014-10-14 23:20:02

+0

不確定你的意思,你能澄清/重述嗎? – 2014-10-14 23:44:13

0

由於您超出Google配額,您正在通過對等方獲取連接重置。每個GMail API請求都有定義的配額here