成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解前端如何讓服務器主動向瀏覽器推送數據

開發 前端
這篇文章主要講解SSE如何使用,它是瀏覽器自帶的API,如果瀏覽器不兼容,我們也可以對它做兼容。

前言

前面我們已經聊了ajax,它的特點是瀏覽器必須先發起請求,服務器才能給出對應的響應,想一想能不能讓服務器主動向瀏覽器推送數據呢?那么這篇文章我們來聊一聊服務器推送功能。

輪詢

假設你現在需要去做一個球賽直播頁面,一個主播在后臺文字直播比賽,那么這就要求解說數據盡可能的實時到達瀏覽器,那么我們如何解決呢?

最容易想到的就是用ajax輪詢,寫個定時器,每隔幾秒鐘去后端請求一次數據,這當然是可以的,但是這種方式并不是很優雅。因為瀏覽器每次需要主動去詢問服務器有沒有數據,如果反過來服務器有數據能主動告之瀏覽器豈不是更好?

初識推送

那么如何能讓服務器自己主動推送數據呢?下面我們先實現一下服務端的代碼,如下:

 

圖1

如圖1,我們用express起了一個小服務,每當服務器接收到請求在響應時就會把Content-type設置為text/event-stream,這是實現服務器推送的關鍵,它表示這次鏈接采用流實現并且整個頁面生命周期都保持這一個鏈接的打開狀態!

頁面上的實現和普通ajax類似,但也有點不同,如下:

 

圖2

如圖2,獲取數據時的狀態是在3,因為此鏈接一直處于打開狀態。

當你同時運行服務端和客戶端的代碼時,你會發現瀏覽器控制臺會一直打印123,此刻我們就已經實現了服務器推送的功能。

SSE

根據上面介紹的服務器推送的特點,瀏覽器自身也實現了這樣的接口——SSE。

我們先看一下瀏覽器端如何使用,如下:

 

圖3

如圖3,使用EventSource創建一個實例對象,參數是流實現的接口,下面綁定了幾個事件,

  • open,當連接上之后就會立即觸發;
  • message,服務器向客戶端發送數據的默認事件,通過e.data可以獲取到數據;
  • foo,自定義事件(SSE支持自定義事件);
  • error,當鏈接發生錯誤時觸發。

下面我們再看一下服務端實現,如下:

 

圖4

如圖4所示,和圖1中的代碼雷同,先起一下服務端,再打開頁面,看一下現象:

 

圖5

從現象看我們已經實現了服務器推送,符合預期,很好!但是要注意圖4中響應數據時的寫法,以data: 開頭會默認觸發頁面中message事件,以\n\n結尾結束一次推送,如果一行寫不下可以用\n分割;

下面我們看看如何觸發自定義事件,代碼如下:

 

圖6

如圖6,我們加一行字符串——'event:' + 事件名 + '\n',這樣就會觸發頁面中的foo事件而不是message事件,現象如下:

 

圖7

據說SSE具有斷線重連能力,我們試一下,看看是真是假?

 

圖8

圖8證明傳言不虛,當把服務關掉,頁面在不停的嘗試重連,當服務再次啟動,頁面就會立馬鏈接上。如果服務端在發送數據時加一行字符串——"retry: " + 時間 + "\n\n" ,可以設置斷開后重新再鏈接的間隔時間,這個就不演示了。

到目前為止,推送還是無狀態的,如果鏈接斷開了,再次重連,服務器是不知道先前已經推送了什么數據,為了解決這個問題,在每次推送時可以加一行字符串——"id: " + 序號 + "\n",如下:

 

圖9

我們再來看一下現象,如下:

 

圖10

這個序號在頁面上用事件對象的lastEventId屬性可以拿到,當下一次重新連接時,瀏覽器會把最后一次序號放在請求頭的Last-Event-ID字段中,所以服務端可以通過這個請求頭屬性獲取之前數據推送的情況。

 

圖11

總結

這篇文章主要講解SSE如何使用,它是瀏覽器自帶的API,如果瀏覽器不兼容,我們也可以對它做兼容。從以上的介紹可以看出它是單向的,連接后只能是服務器向瀏覽器推送,所以它非常適合僅有查詢的需求,像球賽直播、股票類的需求。 

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2015-06-11 14:05:46

QQ瀏覽器

2011-04-22 10:36:09

Server Push推送技術

2018-08-30 08:47:59

瀏覽器web服務器通信

2009-06-29 19:49:11

服務器刀片服務器IBM

2017-05-11 09:41:48

2023-12-07 19:19:11

2021-06-01 09:12:47

前端瀏覽器緩存

2014-05-05 09:56:12

Web瀏覽器遠程監控

2021-05-07 13:56:13

Linux器監視服務器

2009-05-22 08:58:47

微軟IE瀏覽器

2012-03-20 11:07:08

2021-02-05 07:28:11

SpringbootNettyWebsocke

2012-03-20 11:41:18

海豚瀏覽器

2012-03-19 17:25:22

2012-03-20 11:31:58

移動瀏覽器

2009-02-27 13:35:00

打印服務器打印共享

2013-11-18 14:42:53

瀏覽器渲染

2012-02-01 13:42:19

2012-03-19 17:17:00

移動瀏覽器歐朋

2012-03-20 11:22:02

QQ手機瀏覽器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: av香蕉 | 亚洲一区中文字幕在线观看 | 欧美网站一区二区 | 国精久久 | 国产91综合 | 国产成人久久精品一区二区三区 | 91精品国产91久久久 | 久久久久国产 | 国产午夜精品视频 | 久久99国产精品 | 黄色大片网 | 久久国产高清 | 在线观看视频亚洲 | 日韩av中文 | 久久国产电影 | 久产久精国产品 | 国产午夜精品久久 | 亚洲国产精品一区二区www | 欧美精品久久久久久 | 国产精品久久久久久久久久三级 | 亚洲成人精品在线 | 欧美自拍第一页 | 老司机狠狠爱 | 91精品国产综合久久久密闭 | 自拍偷拍亚洲视频 | 成人在线观看免费视频 | 国产精品久久久久无码av | 国产成人精品久久二区二区 | 婷婷91| 国产精品高潮呻吟久久av野狼 | 中文一级片| www四虎com| 麻豆国产一区二区三区四区 | 欧美成人精品一区二区男人看 | 亚洲一二三区在线观看 | 成年人视频在线免费观看 | www日本在线 | chinese中国真实乱对白 | 成人在线视频免费观看 | 久久91精品国产一区二区 | 亚洲成av人影片在线观看 |