那麼基於上面兩個問題,咱們要思考方向就是推的模式,這裏使用時websocket,中心思想就是:有日誌上報大屏就有網絡請求,沒有上報就老實一點,別發請求了,省省吧前端
那麼對應websocket不太理解的同窗,能夠考慮看下 WebSocket原理及如何使用 ,裏面講解的比較詳細。web
上咱們的時序圖:redis
說明:後端
Q:websocket爲何要用ping/pong來維持?websocket
A:由於在本方案裏面,ping/pong心跳用來肯定一個大屏是否打開的,由於咱們在後端計算大屏數據是跟咱們的條件來走的,若是咱們的大屏掉線了,可以及時通知後臺任務,那麼咱們的計算量會少不少網絡
Q:用ping/pong就能百分百保證個人websocket不會斷連嗎?架構
A:答案是否認的,互聯網上真沒有百分百的事情,網絡的一個抖動,咱們的ping/pong就有可能掛了,這是很正常的狀況,咱們在業務上會對於ping/pong進行一些重試機制,這個重試可能會短期內的,好比1s內發起多少次請求的;若是這個請求不能正確獲取數據,那麼服務端過時後,其實這個token就沒有太多用處了,前端就會有個定時器去探測websocket服務與本地通信是否有問題,沒有問題進行從新的connect操做,而在探測過程當中,咱們有個降級操做,會將咱們websocket操做變成傳統的拉模式,這個要結合咱們上一篇文件技術方案。app
Q:我條件確定會變動,變動證實作?socket
A:這是一個好問題,由於啥,切換大屏參數直接致使咱們不少模塊數據是須要從新渲染的,那麼咱們須要從新的發送push操做,而後後續邏輯是一致的。ide
Q:爲何要用token的介入呢,我已經登入系統了,直接uid就能夠不?
A:開始咱們也是考慮到uid的方案的,爲何不行呢,主要是咱們這裏的token是跟websocket相關的,能夠近似的認爲是socket裏面的fd,好比我一我的開了10個大屏,那麼我推送的那一刻,我須要將10個大屏數據都能推送到,而區別就在於,uid只有一個,token是10個
這裏爲何花了兩個篇幅來寫大屏這塊呢,主要是在一些簡單場景下,咱們1.0版本會更適合,畢竟websocket相對於流程複雜一點,那麼中間節點處毛病地方就會多一點,可是複雜場景下面,又必需要這樣作設計,因此咱們就分開兩個文章來進行說明。
但願經過兩篇文章,同窗們可以從中學習到大屏製做技術方案的相關知識點,可以讓咱們應對產品經理 完(刁)美(鑽)需求時候,咱們有一個很是合適的技術方案輸出。