gpt4 book ai didi

ruby - IMAP 空闲如何工作?

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:23 28 4
gpt4 key购买 nike

有人可以向我解释 IMAP IDLE 是如何工作的吗?它是否为它打开的每个连接创建一个新进程?我可以以某种方式使用 eventmachine 吗?

我正尝试在后台工作人员的帮助下在 heroku 上用 ruby​​ 实现它。有什么想法吗?

最佳答案

在 Ruby 2.0 及更高版本中,有一个空闲方法接受代码块,每次您收到未标记的响应时都会调用该代码块。收到此响应后,您需要中断并拉取传入的电子邮件。空闲调用也是阻塞的,因此如果您想让它保持异步,则需要在线程中执行此操作。

这是一个示例(@mailbox 在本例中是 Net::IMAP 的一个实例):

def start_listener()
@idler_thread = Thread.new do
# Run this forever. You can kill the thread when you're done. IMAP lib will send the
# DONE for you if it detects this thread terminating
loop do
begin
@mailbox.select("INBOX")
@mailbox.idle do |resp|
# You'll get all the things from the server. For new emails you're only
# interested in EXISTS ones
if resp.kind_of?(Net::IMAP::UntaggedResponse) and resp.name == "EXISTS"
# Got something. Send DONE. This breaks you out of the blocking call
@mailbox.idle_done
end
end
# We're out, which means there are some emails ready for us.
# Go do a seach for UNSEEN and fetch them.
process_emails()
rescue Net::IMAP::Error => imap_err
# Socket probably timed out
rescue Exception => gen_err
puts "Something went terribly wrong: #{e.messsage}"
end
end
end
end

关于ruby - IMAP 空闲如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4611716/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com