1. 程式人生 > >伺服器推送技術之——SSE

伺服器推送技術之——SSE

一 點睛

伺服器推送技術在日常開發中較為常用。

SSE:Server send Event:服務端傳送事件。

本專案推送技術是基於:當客戶端向服務端傳送請求,服務端會抓住這個請求不放,等有資料更新的時候才返回給客戶端,當客戶端接收到訊息後,再向服務端傳送請求,周而復始。這種方式的好處是減少了伺服器的請求數量,大大減少了伺服器的壓力。

二 實戰

1 控制器

package com.wisely.highlight_springmvc4.web.ch4_5;

import java.util.Random;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SseController {
    //這裡使用輸出的媒體型別為text/event-stream,這是服務端的SSE的支援
    @RequestMapping(value="/push",produces="text/event-stream") 
    public @ResponseBody String push(){
         Random r = new Random();
        try {
                //演示每5秒向瀏覽器推送隨機訊息
                Thread.sleep(5000);
        } catch (InterruptedException e) {
                e.printStackTrace();
        }   
        return "data:Testing 1,2,3" + r.nextInt() +"\n\n";
    }

}

2 演示頁面

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>SSE Demo</title>
</head>
<body>
<div id="msgFrompPush"></div>
<script type="text/javascript" src="<c:url value="assets/js/jquery.js" />"></script>
<script type="text/javascript">
 if (!!window.EventSource) { //EventSource物件只有新式的瀏覽器才有(Chrome、Firefox)等,EventSource是SSE的客戶端
          var source = new EventSource('push');
          s='';
          //新增SSE客戶端監聽,在此獲得伺服器端推送的訊息
          source.addEventListener('message', function(e) {
                 s+=e.data+"<br/>";
                 $("#msgFrompPush").html(s);
           
          });
          source.addEventListener('open', function(e) {
               console.log("連線開啟.");
          }, false);
          source.addEventListener('error', function(e) {
               if (e.readyState == EventSource.CLOSED) {
                  console.log("連線關閉");
               } else {
                   console.log(e.readyState);   
               }
          }, false);
       } else {
               console.log("你的瀏覽器不支援SSE");
       }
</script>
</body>
</html>

三 配置

新增轉向sse.jsp頁面的對映:

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/sse").setViewName("/sse");
    }

四 實戰

相關推薦

伺服器技術——SSE

一 點睛 伺服器推送技術在日常開發中較為常用。 SSE:Server send Event:服務端傳送事件。 本專案推送技術是基於:當客戶端向服務端傳送請求,服務端會抓住這個請求不放,等有資料更新的時候才返回給客戶端,當客戶端接收到訊息後,再向服務端傳送請求,周而復始。

JavaEE開發SpringMVC中的靜態資源對映及伺服器技術

在上篇部落格中,我們聊了《》。本篇部落格我們繼續的來聊SpringMVC的東西,下方我們將會聊到js、css這些靜態檔案的載入配置,以及伺服器推送的兩種實現方式。當然我們在伺服器推送時,會用到JQuery的東西,所以我們先聊一下如何載入靜態資原始檔,然後我們再聊如何實現伺服器推送。 下方給出了兩種實現伺服器推

伺服器技術

什麼是伺服器推送技術 推送技術是指通過客戶端與伺服器端建立長連結,客戶端可以接收由伺服器端不定時傳送的訊息。 解決方案 1.Ajax短輪詢 2.Ajax長輪詢 3.WebSocket 短輪詢 Ajax短輪詢:http 短輪詢是 server 收到請求不管是否有資料

HTML5中的伺服器技術 -Server-Sent Events

一直以來,HTTP協議都是嚴格遵循Request-Response模型的。客戶端傳送一個Request到伺服器,伺服器對Request作出響應並將Response傳送回客戶端。也就是說,所有的互動都是由客戶端發起的,伺服器不會發起任何互動。為了建立互動性更強的web應用程

HTML5伺服器訊息Server-Sent Events

一、Server-Sent 事件定義: Server-Sent 事件指的是網頁自動從伺服器獲得更新。 以前也可能做到這一點,前提是網頁不得不詢問是否有可用的更新。通過 Server-Sent 事件,更新能夠自動到達。 二、例子: 1.Html: @{ ViewBa

ASP.NET Web實時訊息後臺伺服器技術--GoEasy

越來越多的專案需要用到實時訊息的推送與接收,怎樣用asp.net實現最方便呢?我這裡推薦大家使用GoEasy, 它是一款第三方推送服務平臺,使用它的API可以輕鬆搞定實時推送! 瀏覽器相容性:GoEasy推送 支援websocket 和polling兩種連線方式,從而可以支

java web 伺服器技術 comet實現(原理)

最近對伺服器推送技術比較感興趣,在網上也看了好些文章,由於每個人理解的不同,實現細節或者語言表達方式不同,本人被各種名詞或者技術實現搞的頭大,於是自己準備整理下。 首先實現伺服器推送技術一直一來是B/S應用開發的一塊難題,因為是基於HTTP協議的,HTTP協議為無狀態,單

.NET基於comet伺服器技術(web實時聊天)

Comet 也稱反向 Ajax 或伺服器端推技術.其思想很簡單:將資料直接從伺服器推到瀏覽器,而不必等到瀏覽器請求資料。 主要思想:伺服器端將資料推送到客戶端(瀏覽器) 系統簡單說明如下: { 系統所用資料庫:sqlite資料庫   UserInfo:使用者資訊表

goEasy伺服器技術

發現一個伺服器推送和牛逼的 就是連結數如果達到一定量級的話就要收費的。 廢話不多說,直接進入正題,如何實現: 1. 從GoEasy獲取appkey appkey是驗證使用者的有效性的唯一標識。 用註冊好的賬號登入到GoEasy的後臺管理系統,建立您自己應用(

web聊天程式,ajax+伺服器技術

web聊天技術一般用ajax請求伺服器,方式有多種,比如定時幾秒請求一次,或長連線什麼的。我個人還是喜歡“伺服器推”這種模式,它不用定幾秒請求一次讓伺服器大大減壓。長連線什麼這個不懂什麼意思不管了(額,不知道”伺服器推“屬於哪一種)。 "伺服器推送",是指當有訊息時就把訊息

PHP Web實時訊息後臺伺服器技術--GoEasy

越來越多的專案需要用到實時訊息的推送與接收,怎樣用PHP實現最方便呢?我這裡推薦大家使用GoEasy, 它是一款第三方推送服務平臺,使用它的API可以輕鬆搞定實時推送! 瀏覽器相容性:GoEasy推送 支援websocket 和polling兩種連線方式,從而可以支援IE

Dwr java伺服器技術伺服器到頁面)

原始碼及展示 Gitee: https://gitee.com/liaotuo/DwrTest 展示 簡介 簡略的實現了伺服器反向通知到前臺頁面, 在輸入框輸入文字,點擊發送按鈕,訊息會被通知到所有線上的使用者。 實現 依賴

springMVC學習--8 SSE(Server Send Event)--服務端技術之一

SSE技術,即Server Send Event與非同步Servlet 3.0+、Websocket等為伺服器端推送技術。SSE技術的特點是使用Http協議,輕量級易使用,在伺服器端只要通過ContentType=“text/event-stream; char

java伺服器訊息技術

其實有很多種方式實現伺服器推送,它們各有各的優缺點: 1.傳統輪詢:此方法是利用 HTML 裡面 meta 標籤的重新整理功能,在一定時間間隔後進行頁面的轉載,以此迴圈往復。它的最大缺點就是頁面刷性給人帶來的體驗很差,而且伺服器的壓力也會比較大。 2.Ajax 輪詢:非同步響應機制,即通過不間斷的客戶端 A

消息webSocket

還需 由於 else har 頁面 try window class logs 友情提示: 消息推送的介紹可以參考http://www.cnblogs.com/dahuandan/p/6816173.html 什麽是webSocket webSocket是為解決客

Android 基於Netty的消息方案概念和工作原理(二)

img b2c 決定 watermark net nios 通道 感覺 art 上一篇文章中我講述了關於消息推送的方案以及一個基於Netty實現的一個簡單的Hello World。為了更好的理解Hello World中的代碼,今天我來解說一下關於Netty中一些概念和工

Android 基於Netty的訊息方案物件的傳遞(四)

在上一篇文章中《Android 基於Netty的訊息推送方案之字串的接收和傳送(三)》我們介紹了Netty的字串傳遞,我們知道了Netty的訊息傳遞都是基於流,通過ChannelBuffer傳遞的,那麼自然,Object也需要轉換成ChannelBuffer來傳遞。好在Netty本身已經給我們寫好了

Android 基於Netty的訊息方案字串的接收和傳送(三)

在上一篇文章中《Android 基於Netty的訊息推送方案之概念和工作原理(二)》 ,我們介紹過一些關於Netty的概念和工作原理的內容,今天我們先來介紹一個叫做ChannelBuffer的東東。 ChannelBuffer  Netty中的訊息傳遞,都必須以位元

Android 基於Netty的訊息方案概念和工作原理(二)

上一篇文章中我講述了關於訊息推送的方案以及一個基於Netty實現的一個簡單的Hello World,為了更好的理解Hello World中的程式碼,今天我來講解一下關於Netty中一些概念和工作原理的內容,如果你覺得本篇文章有些枯燥,請先去閱讀《Android 基於Netty的訊息推送方案之Hell

spring boot中使用websocket實現點對點通訊與伺服器

WebSocket介紹    websocket是html中一種新的協議,它實現了真正的長連線,實現了瀏覽器與伺服器的全雙工通訊(指在通訊的任意時刻,線路上存在A到B和B到A的雙向訊號傳輸)。 現在我們接觸的協議大多是htttp協議,在瀏覽器中通過http協議實現了單向的通訊