НТН

аюсь создать (пока частное) веб-приложение, которое будет использовать соединения IMAP IDLE, чтобы показывать электронные письма людей по мере их поступления.

Мне трудно понять, как взломать это вместе - и как это будет сочетаться с моим сервером Heroku RoR.

Я написал базовый скрипт для подключения к серверу IMAP и холостого хода, выглядит примерно так (упрощенно):

imap = Net::IMAP.new server, port, usessl
imap.login username, password
imap.select "INBOX"

imap.add_response_handler do |response|
  if resp.kind_of(Net::IMAP::UntaggedResponse) && resp.name == "EXISTS"
    # New mail recieved. Ping back and process.
  end
end

imap.idle
loop do
  sleep 10*60
  imap.renew_idle
end

Это сделает одно соединение с сервером IMAP и начнет работать на холостом ходу. Как видите, это блокировка с помощью цикла.

Я бы хотел, чтобы несколько IMAP-соединений одновременно работали на холостом ходу для моих пользователей. Изначально я просто хотел поместить каждого из них в поток, вот так:

Thread.new do
  start_imap_idling(server, port, usessl, username, password)
end

Я еще не настолько проницателен, но с этим решением мне все равно придется блокировать мой основной поток, чтобы ждать потоков? Так что, если я сделаю что-то вроде:

User.each do |user|
  Thread.new do
    start_imap_idling(server, port, usessl, username, password)
  end
end

loop do
  # Wait
end

Это будет работать, но не без цикла внизу, чтобы позволить потокам работать?

Мой вопрос: как мне лучше всего это совместить с моим приложением Ruby On Rails на Heroku? Я не могу блокировать поток с помощью последнего цикла - так как мне это запустить? Другой сервер? Дина более - возможно, рабочий? Я немного читал о Event Machine - может ли это решить мою проблему, если да, то как мне написать это?

Другое дело, что я хотел бы иметь возможность добавлять новые клиенты imap и удалять текущие на лету. Как это может выглядеть? Возможно, что-то с очередью?

Любая помощь и комментарии очень ценятся!