soul 網(wǎng)關(guān)入門篇(六):數(shù)據(jù)同步方式之 websocket

前言

上次說(shuō)到,數(shù)據(jù)同步的大體流程是怎么樣。那今天我們來(lái)從 websocket 的方式入手,看看他的實(shí)現(xiàn)如何。哪些精妙設(shè)計(jì)的方案,哪些在我們平常編碼中能采用的呢?

多個(gè) admin 服務(wù)

查看 WebsocketSyncDataService 的第一段代碼
String[] urls = StringUtils.split(websocketConfig.getUrls(), ",");
進(jìn)入 WebsocketConfig 時(shí)我們可以得知,我們可以配置多個(gè) admin 的服務(wù),并且他的配置方式為 127.0.0.1:8888,127.0.0.1:8889 ,配置為 soul-bootstrap 中的

soul :
    sync:
        websocket :
             urls: ws://localhost:9095/websocket,ws://localhost:9096/websocket

注意:這中間是沒(méi)有空格的。
我們并不知道這樣的配置是否正確,我們驗(yàn)證一下。配置好后重啟 bootstrap, 發(fā)現(xiàn)

2021-01-20 23:54:19.387 ERROR 4530 --- [           main] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket url( ws://localhost:9096/websocket) is error

連接并不成功,這時(shí)我們得另外在起一個(gè) admin,修改 soul-admin 的端口配置,


idea 配置9096端口

配置成功后啟動(dòng)應(yīng)用,這個(gè)時(shí)候我們本地機(jī)子上有兩個(gè) admin 的進(jìn)程。
由于之前啟動(dòng)的是 9095, 那現(xiàn)在我在 9096 上修改參數(shù):


修改原有配置.png

為了更好的辨識(shí),重啟了 bootstrap,發(fā)現(xiàn) websocket client 有了兩個(gè)鏈接。
2021-01-21 00:18:11.966  INFO 775 --- [           main] b.s.s.d.w.WebsocketSyncDataConfiguration : you use websocket sync soul data.......
2021-01-21 00:18:12.022  INFO 775 --- [           main] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket connection is successful.....
2021-01-21 00:18:12.347  INFO 775 --- [           main] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket connection is successful.....

由此可知,我們的配置目前為止是生效的。

soul websocket 同步的流程

接著 WebsocketSyncDataService 往下看:

clients.add(new SoulWebsocketClient(new URI(url), Objects.requireNonNull(pluginDataSubscriber), metaDataSubscribers, authDataSubscribers));

這里有個(gè)創(chuàng)建 SoulWebsocketClient 的操作,我們進(jìn)入此類,發(fā)現(xiàn)它集成了 WebSocketClient 類,

  • onOpen(final ServerHandshake serverHandshake) 原文注釋:Called after an opening handshake has been performed and the given websocket is ready to be written on. 大體的意思是說(shuō):在鏈接服務(wù)端后調(diào)用此方法
  • onMessage(final String result) 原文注釋:Callback for string messages received from the remote host;大體意思是說(shuō):從遠(yuǎn)端服務(wù)器上接受到字符串信息后調(diào)用
  • onClose(final int i, final String s, final boolean b) 原文注釋:Called after the websocket connection has been closed.
  • onError(final Exception e) 原文注釋:Called when errors occurs.

當(dāng)服務(wù)端,也就是 admin 編輯信息后會(huì)發(fā)送 message ,這時(shí)候會(huì)調(diào)用 onMessage 的方法。后臺(tái)更新 selector 時(shí)的調(diào)試


調(diào)試

經(jīng)過(guò)一波 debug ,得出下面這張圖:


數(shù)據(jù)websocket同步的流程圖.png

總結(jié):1. 還需要深入的是: websocket 的使用 demo,和使用場(chǎng)景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容