2011-07-19 62 views
0

假設您是排隊服務的Ruby客戶端,例如RabbitMQ的。如何實現等待消息,以便不進行活動輪詢,消耗資源?這直接來自於問題Ruby blocking on a value - 如果一個AMQP客戶端可以高效地完成它,可以使用類似於Memcached的方式進行讀取......一般來說,對於RabbitMQ以及這樣的用法,我們必須讓自己滿意,等待很聰明!Ruby AMQP客戶端如何有效地阻止等待消息?

回答

1

在Ruby世界中,這主要通過使用asynchronous event driven I/O來完成。 如果你看看AMPQ-client in GitHub,它支持2個這樣的庫,EventMachine和Cool.IO.

輪詢有效,但等待循環是在操作系統內核的幫助下完成的。例如,如果在Linux上運行,EventMachine會使用類似epoll的東西。

當期望的事件被觸發時,你的回調函數被調用。 如果您想深入瞭解EventMachine的工作原理,可以看看here

AMPQ客戶端仍然通過套接字與隊列服務器進行通信,但API會將等待循環和通知推遲到OS內核。

+0

偉大的指針,謝謝! – Alexy