站長資訊網
        最全最豐富的資訊網站

        服務器推送事件的詳細介紹

        服務器推送事件(Server-sent Events)是基于WebSocket 協議的一種服務器向客戶端發送事件&數據的單向通訊。目前所有主流瀏覽器均支持服務器發送事件,當然除了 Internet Explorer 。2333…

        WebSocket 協議是繼HTTP協議后又一服務器客戶端通訊協議,不同于HTTP單純的客戶端請求服務器響應單向通訊模式的是它支持了服務端客戶端的雙向通訊。

        Server-sent Events 的使用

        Server-sent Events(以下簡稱SSE)作為服務器=>客戶端通訊方式那必然客戶端要有相應的服務地址和響應方法,服務端要有相應的數據發送方法;廢話不多說,上代碼!

        客戶端JS代碼

         H5頁面需添加如下JS代碼:     <script>         if (typeof (EventSource) !== "undefined") {             //推送服務接口地址 var eventSource = new EventSource("http://localhost:2242/webservice/ServerSent/SentNews");             //當通往服務器的連接被打開 eventSource.onopen = function () {                 console.log("連接打開...");             }              //當錯誤發生  eventSource.onerror= function (e) {                  console.log(e);              };              //當接收到消息,此事件為默認事件  eventSource.onmessage = function (event) {                  console.log("onmessage...");               eventSource.close()//關閉SSE鏈接                };              //服務器推送sentMessage事件  eventSource.addEventListener('sentMessage', function (event) {                     var data = eval('('+event.data+')');//服務器端推送的數據,eval裝換Json對象  var origin = event.origin;//服務器 URL 的域名部分,即協議、域名和端口,表示消息的來源。  var lastEventId = event.lastEventId;////數據的編號,由服務器端發送。如果沒有編號,這個屬性為空。  //此處根據需求編寫業務邏輯  console.log(data);              }, false);          } else {              //瀏覽器不支持server-sent events 所有主流瀏覽器均支持服務器發送事件,除了 Internet Explorer。  document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";          }      </script>

        服務端

        服務端應當返回怎樣的數據格式?應當以什么樣的響應給客戶端呢?先來個.Net 的樣例

             /// <summary>/// 推送消息/// </summary>/// <returns></returns>        [HttpGet]public HttpResponseMessage SentNews()          {              HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);try{//response.Headers.Add("Access-Control-Allow-Origin", "*");//如需要跨域可配置string data_str = “推送至客戶端的數據”;//當然可以是json字符串格式string even = "", data = "";if (!string.IsNullOrWhiteSpace(data_str))                  {                      even = "event:sentMessagen";                      data = "data:" + data_str + "nn";                  }string retry = "retry:" + 1000 + "n";//連接斷開后重連時間(毫秒),其實可以理解為輪詢時間 2333...byte[] array = Encoding.UTF8.GetBytes(even + data + retry);                  Stream stream_result = new MemoryStream(array);                  response.Content = new StreamContent(stream_result);                  response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/event-stream");//此處一定要配置response.Headers.CacheControl = new CacheControlHeaderValue();                  response.Headers.CacheControl.NoCache = false;              }catch (Exception ex)              {                  LogHelper.WriteWebLog(ex);              }return response;          }

        看完以上代碼我想你應該有個大概了,響應的方式還是HTTPResponse響應,但總是有點小小的要求的:

        • 響應報頭"Content-Type" 要設置為 "text/event-stream"

        響應的數據格式也應該注意到了上述代碼中的"data:"、"event:"和"retry:"這些標記:

        1. event:表示該行用來聲明事件的類型。瀏覽器在收到數據時,會產生對應類型的事件。

        2. data:表示該行包含的是數據。以 data 開頭的行可以出現多次。所有這些行都是該事件的數據。

        3. retry:表示該行用來聲明瀏覽器在連接斷開之后進行再次連接之前的等待時間。

        4. id:表示該行用來聲明事件的標識符(即數據的編號),不常用。

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品兄妹在线观看麻豆| 91久久精品视频| 久久精品国产亚洲精品2020| 国产精品99久久久久久猫咪 | 亚洲国产精品碰碰| 四虎精品成人免费观看| 国产日韩精品欧美一区喷水| 亚洲精品无码你懂的网站| 国产精品成人99久久久久| 99精品国产一区二区三区2021 | 中文国产成人精品久久不卡| 国产精品美女WWW爽爽爽视频| 国产精品久久久久久| 久久国产精品成人片免费| 亚洲av午夜精品一区二区三区| 国产精品色视频ⅹxxx| 思思99热在线观看精品| 国产精品视频网站你懂得| 国精品午夜福利视频不卡| 色婷婷在线精品国自产拍| 午夜三级国产精品理论三级| 久久精品成人| 精品一区二区三区色花堂| 国产亚洲精品无码拍拍拍色欲| 国产精品白丝jkav网站| 9久热这里只有精品| 麻豆精品久久精品色综合| 精品国产麻豆免费人成网站| 99久久婷婷免费国产综合精品| 国产精品免费观看调教网| 久久亚洲私人国产精品vA| 色偷偷88888欧美精品久久久| 中文字幕无码精品亚洲资源网久久 | 中文字幕亚洲精品资源网| 久久国产精品国产自线拍免费 | 精品久久久久久成人AV| 精品人妻va出轨中文字幕| 久久精品九九亚洲精品| 精品9E精品视频在线观看 | 久久久久九九精品影院| 欧美精品一二区|