Posted on 2010-02-20 04:42
leekiang 閱讀(372)
評論(0) 編輯 收藏 所屬分類:
ruby
另一個常見的問題是當應用軟件要執行一個需時長的請求時,處理不當。如果實現得不好,會讓處理這個web請求的handler很長時間沒有反應。
這個問題是在人機界面方面很普遍,而且也有一個普遍的解決方法 -- 把任務交給一個背景運行的過程或線程。任何開發過桌面應用的人都會覺得很熟悉。但是有時候如果開發者把切換和通信做得不好,也會碰到麻煩。
一個我覺得較好的辦法,而幸好我的ThoughtWorks同事們也同意,就是使用一個actor。在這個模型里,web請求的handler把需時長的請求包裝為一個命令(command),然后放進隊列(queue)內。在背景運行的actor就監察著這個queue,從queue中提出并且執行這個命令。當它把這個命令執行完了,就通知前臺界面的actor。通常這個queue一開始會是數據庫的一個表,之后如有需要的話,再把它改為一個消息隊列(message queue)。
和ActiveRecord的漏洞一樣,我提起這個不是因為它是Rails里特有的問題;我們在各種應用也會看到同樣的問題。值得在這里帶出是因為用Rails的人們往往很容易忘了有這樣的情況發生,也忘了有這樣的模式去解決。我們發現Rails把web開發中重復又重復的環節變得簡易和快,但是復雜的環節是仍然存在的。
來源:http://rickylui.com/lionwiki/index.php?page=Ruby+at+ThoughtWorks
???? http://martinfowler.com/articles/rubyAtThoughtWorks.html