今年疫情的突襲,改變了不少人以往在生活和工做中的方式,視頻會議、協同編輯、在線直播 / 教育等業務場景凸顯重要性。人們經過線上方式,實時的獲取信息、同步信息,以快捷且不受空間限制的形式完成溝通、學習、工做等需求。html
本文將以微信小程序實時彈幕功能爲例,向你們介紹高實時業務場景的功能技術實現過程。前端
短輪詢web
短輪詢是客戶端每隔一段時間向服務器發出請求,服務器端在收到請求後,不管是否有數據更新,都直接進行響應。數據庫
長輪詢npm
當服務器收到客戶端發來的請求後,服務器端不會直接進行響應,而是先將這個請求掛起,而後判斷服務器端數據是否有更新。若是有更新,則進行響應,若是一直沒有數據,則到達必定的時間限制才返回。小程序
Server-sent Events(SSE)segmentfault
SSE 容許服務器推送數據到客戶端,不須要創建或保持大量的客戶端發往服務器端的請求,能夠實現只要服務器端數據有更新,就立刻發送到客戶端。後端
WebSocket微信小程序
WebSocket 是一種網絡傳輸協議,支持雙向可靠的通訊。首先須要在客戶端和服務器端創建起一個鏈接,這部分須要 http。鏈接一旦創建,客戶端和服務器端就能夠相互發送數據,不存在請求和響應的區別。服務器
實時數據庫是知曉雲近期推出的重磅基礎能力,基於 WebSocket 實現客戶端和服務端的實時雙向通訊,在雲端數據發生變化時立刻通知全部客戶端來同步數據,從而改變了以往只能由客戶端按需向雲端請求或經過定時輪詢來刷新數據的單向模式。
實時數據庫可讓開發者無需投入額外的開發資源,即可輕鬆、快速的搞定實時性高的業務場景。對於社交聊天、彈幕、多玩家遊戲、協同編輯、股票基金實時報價、體育實況更新、視頻會議 / 聊天、基於位置的應用、在線教育、智能家居等場景都頗有幫助。
準備
註冊一個微信小程序
註冊一個知曉雲帳號,並創一個知曉雲應用
ps:在左側欄找到「設置」,選項「應用」能夠找到開發者 ID,用於知曉雲 SDK 初始化。
安裝
目前支持的版本 3.14.0-beta.2 及以上。
分析
知曉雲 實時數據庫有一個限制就是必須先登陸,因此咱們在實現視頻彈幕的時候,須要先實現登入登出。
有兩個界面狀態:
這樣子就是一個相對完備的應用了。
首先是訂閱一個表的事件 :
const Danmu = new BaaS.TableObject('danmu')const subscription = MyTable.subscribe('create', { oninit: () => { console.log('訂閱成功') }, onerror: error => { console.log('訂閱失敗', error) }, onevent: ({after}) => { console.log('接收到知曉雲推送過來的消息', after) // 這個時候就能夠調用小程序視頻組件的 API 產生彈幕效果 }, })
每次訂閱都會返回一個訂閱關係對象 subscription,使用者能夠在特定時機調用 subscription.unsubscribe() 取消訂閱。好比說小程序頁面加載的時候發起訂閱,頁面銷燬的時候取消訂閱(網頁端,刷新的時候不須要主動調用取消訂閱也會取消訂閱)。
而後,能夠向這個表寫入一 條 數據:數據將寫到知曉雲,知曉雲再 將 數據的變化推送到全部跟這張表創建了 create 訂閱關係的客戶端。
咱們能夠在微信開發者工具看到小程序界面,輸入彈幕內容,點擊發送彈幕爲數據表新增一條彈幕數據,小程序端便可收到新增的數據行,並進行彈幕顯示。
彈幕小程序界面
以上是實時彈幕功能的技術實現過程,如需觀看視頻教學,請訪問:
https://www.bilibili.com/video/BV1hz4y1Q7cC/
參考材料
知曉雲 API
初始化
獲取當前用戶
登入
登出
新增數據記錄
實時數據庫(WebSocket)
微信小程序 API
知曉雲成立於 2017 年 8 月 8 日,是國內首家專一於小程序開發的後端雲服務,爲以小程序爲表明的大前端開發者提供最低門檻的 Serverless 無服務架構接入體驗。
它免去了小程序等大前端開發中服務器搭建、域名備案、數據接口實現等繁瑣流程。讓開發者專一於業務邏輯的實現,使用知曉雲開發小程序、app、網站,門檻更低,效率更高。