저는 사람들이 도착할 때 IMAP IDLE 연결을 활용하여 사람들의 이메일을 보여줄 (지금은 사적인) 웹 응용 프로그램을 만들려고합니다.Ruby IMAP IDLE 동시성 - 다루는 방법?
나는 이것을 함께 해킹하는 방법을 알아내는 데 어려움을 겪고 있으며, 이것이 Heroku RoR 서버와 어떻게 잘 어울리는지를 알아내는 데 어려움을 겪고 있습니다.
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 서버에 연결하고 공회전에 대한 기본 스크립트를 작성했습니다
,이 같은 (간체)를 보인다. 보시다시피, 이것은 루프로 막고 있습니다.
내 사용자를 위해 동시에 여러 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 응용 프로그램과 함께 녹일 수 있습니까? 마지막 루프가있는 스레드를 차단할 수 없습니다. 어떻게 실행합니까? 다른 서버? dyno 더 - 아마 노동자? Event Machine에 대해 조금 읽었습니다. 문제가 해결 될 수 있습니까? 그렇다면 어떻게 작성해야합니까?
또 다른 것은 새로운 인스턴트 메시징 클라이언트를 추가하고 현재 인스턴트 메시징 클라이언트를 제거 할 수 있기를 바랍니다. 어떻게 보이나요? 아마도 대기열이있는 것 같습니까?
도움이나 의견을 보내 주시면 대단히 감사하겠습니다.
확실히 EventMachine을 살펴보십시오. 당신은 또한 영웅을 졸업해야 할 수도 있습니다. –