【问题标题】:Is there a race condition in IMAP's idle-search-idle?IMAP 的空闲搜索空闲中是否存在竞争条件?
【发布时间】:2015-02-10 15:54:11
【问题描述】:

我有一堆执行 IMAP 命令的代码“搜索、空闲、完成、搜索、空闲、完成、搜索……”。

是否有可能某些消息在搜索和空闲命令之间到达,因此只有在空闲返回/超时后才会被该代码接收?

EDIT1:我用 GMail 尝试过:在消息处理和 IDLE 之间使用 sleep 60 进行了测试,即使有消息,IDLE 也没有在超时之前返回;为了确保我没有错过来自 IDLE 的事件,我做了一个客户端发送/接收转储,并在 sleep() 之后发送 IDLE 之前尝试了额外的 read();在 sleep() 期间发送测试消息时。

EDIT2:使用两个连接,一个用于获取邮件(使用“搜索”),另一个用于使用 IDLE 获取即时“有新消息”事件,避免了竞争条件,但 someone 声称存在一些问题用那个。

【问题讨论】:

  • 关于使用两个连接的“声称的问题”——你能提供更多的颜色吗?您最终是否使用了两个连接并且是否正常?有什么问题吗?

标签: imap


【解决方案1】:

  
正确实施的服务器会在您启动 IDLE 时立即通知您新消息,如果它尚未通知您以响应其他命令。

【讨论】:

  • 我可以假设 gmail 不是一个正确实现的服务器吗?还是更有可能我做错了什么? (我在消息处理和IDLE 之间使用sleep 60 进行了测试,即使有消息,IDLE 也没有在超时之前返回)。
  • 许多服务器可能需要一分钟才能返回新消息,但我预计您可能会错过它们作为对其他内容的响应,因为您几乎可以随时收到 EXISTS 响应。
  • 不,我似乎没有错过任何回复。我做了一个客户端发送/接收转储,并在 sleep() 之后发送 IDLE 之前尝试了额外的 read();在 sleep() 期间发送测试消息时。
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 2011-02-16
  • 2012-09-18
  • 2018-06-06
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多