soul原始碼學習 六 websocket資料同步

2021-10-16 22:32:06 字數 1680 閱讀 8235

資料同步過程

原始碼分析

spring框架提供了事件發布訂閱機制,由發布者、訂閱者、事件三個關鍵要素組成,發布者發布事件後,由該事件的訂閱者進行事件處理。

事件(所有事件均繼承該類)

private static final long serialversionuid = 7099057708183571937l;

private final long timestamp = system.currenttimemillis();

super(source);

}public final long gettimestamp() }

訂閱者,也叫***,監聽對應的事件

@functionalinte***ce

}

發布者

@functionalinte***ce

this.publishevent((object)event);

}void publishevent(object var1);

}

該模式類似mq,mq可以支援發布者和消費者不在同一應用中,而使用spring事件機制時,發布者和訂閱者必須在同一應用中

websocket 是 html5 開始提供的一種在單個 tcp 連線上進行全雙工通訊的協議。

在 websocket api 中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以建立永續性的連線, 並進行雙向資料傳輸。

html5 定義的 websocket 協議,能更好的節省伺服器資源和頻寬,並且能夠更實時地進行通訊。

客戶端向soul-admin註冊對應路由資訊,

soul-bootstrap啟動時,會自動通過websocket向soul-admin傳送請求全量路由資訊的請求

soul-admin接收到該請求後,會將全量外掛程式等資訊依次推送過soul-bootstrap

soul-bootstrap接收到訊息,會按訊息型別存到對應的記憶體區域

當使用者在soul-admin中進行相關規則變更時,會通過spring事件機制通知消費者傳送websocket訊息,soul-bootstrap接收到進行同步快取更新

以下貼出關鍵原始碼資訊

soul-bootstrap首次啟動時,進行全量請求

通過soul-spring-boot-starter-sync-data-websocket自動配置,進入該類websocketsyncdataservice

途中標紅色部分構造socket客戶端,如果連線多個soul-admin,配置多個,為關鍵**,再看soulwebsocketclient**:

當首次連線上soul-admin時,會向soul-admin傳送全量同步的訊號。

再來看看soul-admin接到該請求處理時的邏輯:

圖中該類是接收到soul-bootsrap發出全量同步時需要呼叫操作,進行全量同步的方法如下:

至此首次啟動進行全量同步的過程基本完成

Soul閘道器原始碼學習05

soul web基於webflux 可以使用netty作為應用伺服器,eventloop 可以說是netty的排程中心,負責事件的監聽 i o事件 訊號事件 channelpipeline 事件處理鏈,channelhandler事件處理。相對於channelpipeline 而言netty事件分為...

Soul閘道器原始碼學習06

在soul閘道器中每個請求,都會通過責任鏈的方式執行相匹配的外掛程式,所以外掛程式也是soul閘道器的核心,soul閘道器的外掛程式是可插拔的,並且是外掛程式之間依賴關係是松耦合且外掛程式的功能實現高聚合,其次使用者可根據需求定製外掛程式滿足自己的需求。soul外掛程式配置類,使用 spring.f...

Soul原始碼閱讀 1 初識 Soul

無論我們學習什麼東西之前,都要先搞清楚我們要學習的是什麼,就像一些哲學思考先要給出清晰的定義,否則後面的一切都無從談起。從今天開始,我來和大家一起,學習一款非常優秀的開源閘道器專案 soul。soul 是什麼呢?先來看下官網作者的定義 這是乙個非同步的,高效能的,跨語言的,響應式的api閘道器。我希...