3
我正在編寫一個有時需要非常長時間運行的數據庫請求的應用程序。我想執行一些代碼,如果客戶端重新加載或關閉頁面來處理數據庫請求。當用戶中止連接時執行某些操作(Sinatra + Thin)
我一直希望Rack可以掛鉤這種事情,但顯然從我看到的這個層面比Rack更深。
到目前爲止,我能找到的唯一的鉤成細本身,由猴子修補取消綁定功能,在薄Connection類:
module Thin
class Connection < EventMachine::Connection
def unbind
# DO something here
@request.async_close.succeed if @request.async_close
@response.body.fail if @response.body.respond_to?(:fail)
@backend.connection_finished(self)
end
end
end
這將覆蓋薄膜的解除綁定功能,讓我鉤到斷開由EventMachine調用。
有沒有更好的方法?
您應該考慮使長時間運行的請求異步。這將是更清潔的設計,也可以解決您目前的問題。 – randomuser
我實際上是異步運行請求,使用EventMachine,em-syncrhony和sinatra-synchrony。這仍然不能解決我的問題 - 但我想知道用戶什麼時候停止關心數據庫的結果,而不管請求是否同步。 – Ben
據我所知,sinatra-synchrony只能同時運行請求。所以我仍然認爲@Gunjan建議適用。 –