一、WebSocket怎么實(shí)現(xiàn)數(shù)據(jù)庫(kù)表增加一條數(shù)據(jù)然后主動(dòng)推送給客戶端
websocket是一個(gè)全雙工通信協(xié)議,所以只要客戶端和服務(wù)端實(shí)現(xiàn)了相關(guān)邏輯就好了。
現(xiàn)在大部分瀏覽器都支持websocket協(xié)議,寫起來(lái)也很簡(jiǎn)單,用一些現(xiàn)成的js庫(kù)也可以。
服務(wù)器端寫起來(lái)也不算麻煩。
檢測(cè)到數(shù)據(jù)庫(kù)變更就推送一條消息即可。
另一個(gè)問題是如何檢測(cè)到mysql數(shù)據(jù)庫(kù)的變更。
我覺得大概有這樣幾種思路:
代碼實(shí)現(xiàn),有修改數(shù)據(jù)庫(kù)操作的地方,增加一些推送消息的邏輯;加入攔截器,進(jìn)行切面處理,避免第1種到處加入代碼;使用中間件,如canal,實(shí)時(shí)監(jiān)聽數(shù)據(jù)庫(kù)的修改。延伸閱讀:
二、數(shù)據(jù)實(shí)時(shí)推送的實(shí)現(xiàn)方式和應(yīng)用場(chǎng)景
1.輪詢:
客戶端通過代碼定時(shí)向服務(wù)器發(fā)送AJAX請(qǐng)求,服務(wù)器接收請(qǐng)求并返回響應(yīng)信息。
優(yōu)點(diǎn):代碼相對(duì)簡(jiǎn)單,適用于小型應(yīng)用。
缺點(diǎn):在服務(wù)器數(shù)據(jù)沒有更新時(shí),會(huì)造成請(qǐng)求重復(fù)數(shù)據(jù),請(qǐng)求無(wú)用,浪費(fèi)帶寬和服務(wù)器資源。
2.長(zhǎng)連接:
在頁(yè)面中嵌入一個(gè)隱藏的iframe,將這個(gè)隱藏的iframe的屬性設(shè)置為一個(gè)長(zhǎng)連接的請(qǐng)求或者xrh請(qǐng)求,服務(wù)器通過這種方式往客戶端輸入數(shù)據(jù)。
優(yōu)點(diǎn):數(shù)據(jù)實(shí)時(shí)刷新,請(qǐng)求不會(huì)浪費(fèi),管理較簡(jiǎn)潔。
缺點(diǎn):長(zhǎng)時(shí)間維護(hù)保持一個(gè)長(zhǎng)連接會(huì)增加服務(wù)器開銷。
3.webSocket:
websocket是HTML5開始提供的一種客戶端與服務(wù)器之間進(jìn)行通訊的網(wǎng)絡(luò)技術(shù),通過這種方式可以實(shí)現(xiàn)客戶端和服務(wù)器的長(zhǎng)連接,雙向?qū)崟r(shí)通訊。
優(yōu)點(diǎn):減少資源消耗;實(shí)時(shí)推送不用等待客戶端的請(qǐng)求;減少通信量;
缺點(diǎn):少部分瀏覽器不支持,不同瀏覽器支持的程度和方式都不同。?
應(yīng)用場(chǎng)景:聊天室、智慧大屏、消息提醒、股票k線圖監(jiān)控等。