誰かがIMAP IDLEの仕組みを説明できますか?それはそれが開く各接続のための新しいプロセスをフォークしますか?どういうわけかイベントマシンを使ってもいいですか?IMAPアイドルはどのように機能しますか?
私はそれをバックグラウンドワーカーと英雄のルビーに実装しようとしています。何かご意見は?
誰かがIMAP IDLEの仕組みを説明できますか?それはそれが開く各接続のための新しいプロセスをフォークしますか?どういうわけかイベントマシンを使ってもいいですか?IMAPアイドルはどのように機能しますか?
私はそれをバックグラウンドワーカーと英雄のルビーに実装しようとしています。何かご意見は?
IMAP IDLEは、リアルタイム通知を可能にするメールサーバーの実装がサポートできる機能です。 【Wikipedia]
IDLEコマンドはCAPABILITYコマンドにサポートされる機能の一つとして、「IDLE」を返す任意のIMAP4サーバの実装で使用することができます。
クライアントが未承諾のメールボックス更新メッセージを受け入れる準備ができたら、IDLEコマンドはクライアントからサーバーに送信されます。サーバーは、継続( "+")応答を使用してIDLEコマンドへの応答を要求します。 IDLEコマンドは、クライアントが継続に応答するまでアクティブのままであり、IDLEコマンドがアクティブである限り、サーバーはいつでもタグなしEXISTS、EXPUNGE、およびその他のメッセージを自由に送信できます。
IDLEコマンドは、クライアントからの「DONE」継続の受信によって終了します。そのような応答はサーバの継続要求を満たす。 [...]サーバは、コマンドが継続とコマンドを区別できないため、サーバが完了を待っている間にコマンドを送信してはならない(MUST NOT)。ルビー2.0とアップで
、あなたがタグなしの応答を取得するたびに呼び出されるコードブロックを受け入れるアイドル方法があります。この応答が得られたら、入ってきた電子メールを取り出してプルする必要があります。アイドルコールもブロックされているため、非同期にするにはスレッド内でこれを行う必要があります。
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
ありがとう!ついにあなたの事例が私の心を取り戻しました。私はちょうどここに完全なスクリプトを書いた:https://gist.github.com/solyaris/b993283667f15effa579 –
は、あなたがIMAP IDLEが何であるかを知りたいですし、あなたが戻って送信するためにどのようなデータが必要と思います。ここでは
は(@mailboxは、このケースではNet :: IMAPのインスタンスである)のサンプルですクライアント、または既存のIMAPサーバーにIMAP IDLEを実装する方法を知りたい場合は、 – dkarpIMAP IDLEはIMAPプロトコルの一部です。だから、dkarpが尋ねたこと:プロトコル仕様が何であるか、それをウェブサイトに実装する方法を知りたいのですか(私はあなたが英雄について話しているのでIMAPサーバーを作っていないと思います)。 – henrikhodne
答えを見る:http://stackoverflow.com/a/1818718/459863 –