使用GMail API进行长轮询

时间:2014-10-10 20:06:52

标签: python imap long-polling gmail-api

我正在构建一个可以运行几天并且需要实时从GMail收件箱收到通知的安装。 Gmail API非常适合我需要的许多功能,所以我想使用它。但是,它没有像IMAP那样的IDLE命令。

现在我已经创建了一个GMail API实现,每隔几秒轮询一次邮箱。这种方法效果很好,但过了一段时间就会超时(我得到#34;连接由同行重置#34;)。因此,关闭sesson并每半小时左右重启一次以保持活动(如IDLE)是否合理?这是一个可怕的,可怕的黑客攻击,谷歌会在半夜打破我的门吗?

正确的解决方案是使用IMAP登录并使用IDLE通知我的GMail API模块启动并在发生变化时进行更改吗?或者我应该把它搞砸并创建一个仅IMAP实现?

2 个答案:

答案 0 :(得分:3)

肯定会建议不要使用IMAP,请注意,即使使用IMAP IDLE命令也不是实时 - 它只是在封面下每隔几(5?)秒轮询一次,然后推送到连接。 (试验自己,看看那里的延迟。)

查询history.list()经常非常便宜,应该没问题。如果这是针对相当多的用户,您可能需要进行一些优化,例如对非活动邮箱进行智能退避(例如,每次没有更新后退额外5秒到最大值,如一分钟或两分钟)?

除非你每两秒钟与1M用户一起做,否则谷歌肯定不会破坏你的门,甚至可能不会注意到。 :)

API的真实推送通知肯定是需要的。

答案 1 :(得分:0)

您正在通过对等方重置连接,因为您超出了Google配额。每个GMail API请求都定义了here