soul-web基於webflux 可以使用netty作為應用伺服器,eventloop 可以說是netty的排程中心,負責事件的監聽(i/o事件、訊號事件),channelpipeline 事件處理鏈,channelhandler事件處理。
相對於channelpipeline 而言netty事件分為兩大類 inboud 和 outbound,分別由channelinboundhandler 和channeloutboundhandler 負責處理,inbound和outbound 指事件型別。
inbound:事件是由外部觸發的,可以認為並非應用程式主動請求而觸發的事件,比如請求連線、管道有資料傳遞。
outbound:事件是由應用程式主動請求觸發的事件,可認為應用程式發起某個操作事件,比如向socket寫入資料,從socket讀取資料。
channeloperationshandler 被新增到channelpipeline,繼承 channelinboundhandleradapter 重寫了父類接收請求事件的方法。
final
public
void
channelread
(channelhandlercontext ctx, object msg)
try}
事件引數msg 請求的資料,從channeloperations中取出對應的 channel 是http,websocket。
netty請求流程
1、httpserveroperations --> 判斷處理請求msg是httprequesthtpp。
2、httpserverhandle --> 呼叫 reactorhttphandleradapter。
3、reactorhttphandleradapter --> 呼叫 httpwebhandleradapter。
請求傳遞
1、reactor 中請求會先執行webfilter的實現類,再執行webhandler的實現類。
2、healthfilter 判斷是否為健康檢查,filesizefilter判斷contenttype為form-data取出body。
3、執行soulwebhandler 呼叫soul對應的外掛程式。
Soul閘道器原始碼學習06
在soul閘道器中每個請求,都會通過責任鏈的方式執行相匹配的外掛程式,所以外掛程式也是soul閘道器的核心,soul閘道器的外掛程式是可插拔的,並且是外掛程式之間依賴關係是松耦合且外掛程式的功能實現高聚合,其次使用者可根據需求定製外掛程式滿足自己的需求。soul外掛程式配置類,使用 spring.f...
soul閘道器原始碼解析 sofa接入 sofa外掛程式
執行結果 遇到的問題 需要啟動乙個zookeeper 單機就行了 檢查下 soul bootstrap 的pom檔案下是否存在以下配置 com.alipay.sofa sofa rpc all 5.7.6 org.apache.curator curator client 4.0.1 org.apa...
soul閘道器原始碼學習02 http應用示例執行
目標 先啟動後台管理系統 soul admin 和閘道器 soul bootstrap 然後啟動soul example模組的soul example http。開啟系統,可以看到http模組的介面都被註冊到閘道器中。直接訪問http服務,不經過閘道器 經過閘道器 到http服務 效果完全一樣,實現...