初识KV,SSE
最近在接口文檔上發(fā)現(xiàn)了kv獲取配置和see輔助參數(shù)提交的接口,但是不知道在什么地方會用到她,同時為什么要有這些?接下來,我這邊把我的認知和網(wǎng)上的理解給簡單解釋下
一、KV(key value),可以存任何端需要的配置類東西
由于 Nacos 的服務模塊存儲,更多的都是根據(jù)單個或者多個唯? key 去執(zhí)行點查的操作,因此Key-Value 類型的存儲接口最適合不過。而 Key-Value 的存儲接口定義好之后,其實就是這個KVStore 的具體實現(xiàn)了。可以直接將 KVStore 的實現(xiàn)對接 Redis,也可以直接對接 DB ,或者直接根據(jù) Nacos 內核模塊的?致性協(xié)議,在此基礎之上,實現(xiàn)?個內存或者持久化的分布式強(弱)?致性 KV。通過功能邊界將 Nacos 進程進?步分離為計算邏輯層和存儲邏輯層,計算層和存儲層之間的交互僅通過?層薄薄的數(shù)據(jù)操作膠水代碼,這樣就在單個 Nacos 進程里面實現(xiàn)了計算和存儲二者邏輯的徹底分離。
主要用于配置的讀取修改等,方便統(tǒng)一化操作,可用于bs或cs代碼里面的枚舉為文件名,xml文件格式為 id value的格式。
(1)下面是采用kv命令處理數(shù)據(jù):
新增或者修改數(shù)據(jù):consul kv put key value查詢命令:consul kv get key查詢指定路徑下所有的key:consul kv get -recurse path刪除數(shù)據(jù)命令如下:consul kv delete key(2)那么接口如何操作呢,下面是http api的一些寫法:
使用之前需要注意一點,啟動consul agent的時候,需要加上-client 0.0.0.0參數(shù),這個的意思就是允許任何ip的機器連接consul,如果不加這個參數(shù),consul默認只有本機可以訪問。
<1 查詢數(shù)據(jù):
使用http get,url如下,ip為運行consul agent的機器ip,port默認為8500,可以在啟動consul agent的時候通過-http-port選項指定為其他端口,key注意如果有path的話需要帶上,url如下:
http://ip:port/v1/kv/key
例如:
注意:value是經(jīng)過base64編碼的,程序里使用http api的話需要對結果中的value進行解碼。
<2 新增或修改數(shù)據(jù):
使用http put,url如下,body中攜帶value:
http://ip:port/v1/kv/key
例如:
如果需要設置flags,加在query參數(shù)中,例如:
?使用http delete,url如下:
http://ip:port/v1/kv/key
例如:
?其他相關kv可參考:
https://blog.csdn.net/Fanbin168/article/details/52504839
https://blog.csdn.net/weixin_45932150/article/details/122163152
?二、sse(server -sent event) ,通俗解釋起來就是一種基于HTTP的,以流的形式由服務端持續(xù)向客戶端發(fā)送數(shù)據(jù)的技術
由于HTTP是無狀態(tài)的傳輸協(xié)議,每次請求需由客戶端向服務端建立連接,HTTPS還需要交換秘鑰,所以一次請求,建立連接的過程占了很大比例
在http1.1中(1.0也有但未寫入標準),雖然增加了keep-alive來保持和服務器的長連接,省去了很多建立連接的過程,但通信過程仍然是應答式1:1的方式,也就是想要獲得數(shù)據(jù),就必須先發(fā)送一個request才能得到一個response,所以在實時監(jiān)控、推送、視頻直播等實時性較高或者帶寬利用較苛刻的場景,仍然不是很合適
SSE技術由于能保持連接,并持續(xù)接收服務端的數(shù)據(jù),所以彌補了這一缺點,與其他類似技術方案相比,短輪詢、Coment、WebSocket,在大多數(shù)時候,SSE仍然是最好的選擇
web API接口EventSource
EventSource 接口用于接收服務器發(fā)送的事件。它通過HTTP連接到一個服務器,以text/event-stream 格式接收事件, 不關閉連接。
例如:
(1)服務端代碼:
<?php # 指定數(shù)據(jù)類型,指定允許域訪問 header("Content-Type: test/event-stream; charset=utf-8"); header("Access-Control-Allow-Origin:http://127.0.0.1"); echo "data: 現(xiàn)在北京時間是:".date('H:i:s')."\r\n\r\n"; ?>(2)前端代碼
let source;function init(arg) {source = new EventSource('http://127.0.0.1/sse/data.php');source.onopen = () => {console.log("連接已建立", this.readyState);}source.onmessage = (event) => {console.log("從服務器拉取的時間:", event.data);}source.onerror = () => {console.log('');} } init();其他相關參考:
https://www.cnblogs.com/goloving/p/9196066.html
https://blog.csdn.net/weixin_30321709/article/details/101747736
https://www.jianshu.com/p/ed94c8005f2c
總結
- 上一篇: Temporal action loca
- 下一篇: linux vc 调试方法,VC实现【A