rails + plezi


#1

最近JC大有推plezi
可以在rails裡面使用websocket
但是plezi websocket的routing不是寫在routes.rb
而且會覆寫原來的restful rails routing
plezi似乎有提供讓兩種route並存的設定 但是這邊我拼不出來
想請問這邊的實作細節為如何?謝謝


#2

首先你要先知道 Rails 的 “rack” 機制(或稱 middleware,不是 rake ),這個機制包括 sinatra 也有,只不過 sinatra rack 數量比 Rails 少所以比較快,而自己打 eventmachine 則是一個 rack 都沒有,所以通常速度是最快的(當然…你的前置處理寫太肥除外)

你可以在 Rails 下用類似 rake middleware 的方式取出 rack 的列表之類的,你可以看一下 route 在哪裡?(通常是最後一個)

一個封包進 Rails route 之前,會經過很多個程式來做分析和處理,類似取出 header,過濾 session,解析 post / get,解析 IP,甚至是直接把檔案送出,所以會一層一層的過程式,最後才到 route => controller => action => view(layout…)

而 plezi 就是增加入口點在 route 前,就過濾它自己的 route,如果中了就做什麼處理,然後直接回傳, route 之後的動作就不會進行

anyway 你去看 Rails rack 的東西就一大票在搞這類的事情,優點是不用過緩慢的 route,缺點是每個封包都會過那些處理,所以過濾的部分必須寫得非常精簡且快速,否則會拖慢整個系統

這件事情在伺服器的運作中是很正常發生的,類似防火牆就是過濾後打回去,Loading Balance就做處理後做分流,這些都和 rack 機制非常像,簡單的來說就是『過濾 => 處理』,然後把這段放在哪裡而已

以上


#3

感謝!很清楚的回覆
我已經成功整合rails + plezi routing了
雖然不清楚rack的設定,但是routing的行為跟你說的一樣
plezi routing會先處理,若找不到route才會到rails routing