6. Spring MVC 4.1-服务器端推送

翻译 2015年11月19日 21:44:58
  • SSE(server send event)是一种服务器端向浏览器推送消息的技术,而不是我们常规的浏览器像server请求然后响应;
  • 当我们需要使用server向浏览器主动推送数据的时候,请考虑使用该项技术,而不是考虑具有双向通讯功能的websocket;
  • 以前我们用ajax轮询server也能实现,服务器负担大;
  • sse原理是向server请求一次后,server会挂住请求不放(此时浏览器里请求状态是pending),等有数据后才返回给浏览器,然后再发起下一次请求,以此类推;
  • 所有主流浏览器均支持服务器发送事件,除了 Internet Explorer(6,7,8,9);

6.2 示例

  • 服务器推送控制器
package com.wisely.web;

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 {
    //注意produces="text/event-stream"
    @RequestMapping(value="/push",produces="text/event-stream")
    public @ResponseBody String push(){
         Random r = new Random();
         try {
                 Thread.sleep(5000);
         } catch (InterruptedException e) {
                 e.printStackTrace();
         }
         return "data:Testing 1,2,3" + r.nextInt() +"\n\n";
    }
}
  • 页面代码
<div id="msg_from_server"></div>
<script type="text/javascript" src="<c:url value="/js/jquery.js" />"></script>
<script type="text/javascript">
if (!!window.EventSource) {
       var source = new EventSource('push'); //为http://localhost:8080/testSpringMVC/push
       s='';
       source.addEventListener('message', function(e) {

           s+=e.data+"<br/>"
           $("#msg_from_server").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>
  • 效果

 

SSE(Server-Send Event):服务器推送数据的新方式

最近在项目开发中使用了一种比较新的技术,SSE,即 Server-Send Event,使用它从服务器向浏览器推送数据。 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器...
  • li563868273
  • li563868273
  • 2015年12月10日 16:26
  • 2423

spring sse 技术1

SSE技术详解:一种全新的HTML5服务器推送事件技术 前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2017年01月23日 16:38
  • 629

springboot ,sse

  • 2017年10月19日 11:44
  • 112KB
  • 下载

spring sse 3

最近在项目开发中使用了一种比较新的技术,SSE,即 Server-Send Event,使用它从服务器向浏览器推送数据。 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2017年01月23日 16:46
  • 412

spring sse 技术2

这里简单写了一个案例,实现对新订单的监控,如果有新订单,则在前端弹出提示框 第一步:搭建架构,导入jar包,我这里为了方便,导入了一堆jar包​ 1-1.项目结构​ 包结构 ...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2017年01月23日 16:44
  • 301

7、Spring MVC 之 处理异步请求

Spring MVC 3.2开始引入Servlet 3中的基于异步的处理request.往常是返回一个值,而现在是一个Controller方法可以返回一个java.util.concurrent.Ca...
  • u012410733
  • u012410733
  • 2016年08月04日 23:29
  • 11128

6. Spring MVC 4.1-服务器端推送

6.1 服务器端推送 SSE(server send event)是一种服务器端向浏览器推送消息的技术,而不是我们常规的浏览器像server请求然后响应;当我们需要使...
  • software444
  • software444
  • 2015年11月19日 21:44
  • 3321

SpringMVC实现服务器端推送

本篇主要介绍两种方式实现SpringMVC的服务器端推送。方式一,基于SSE(服务器端发送事件)的服务器端推送。 这种方式的流程类似于Ajax。 首先在src/main/resources/vie...
  • James_shu
  • James_shu
  • 2017年02月05日 15:29
  • 4580

Servlet 3异步+Html5 SSE示例

服务器使用serlvet3的异步servlet,客户端使用html5的sse轻松实现消息推送
  • xiaofanku
  • xiaofanku
  • 2017年01月15日 11:36
  • 1345

Spring MVC 学习总结

每个请求处理方法可以有多个不同的参数,以及一个多种类型的返回结果。 一、Action参数类型 如果在请求处理方法中需要访问HttpSession对象,则可以添加HttpSession作为参数,Sp...
  • zhangguo5
  • zhangguo5
  • 2016年07月12日 16:41
  • 1858
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:6. Spring MVC 4.1-服务器端推送
举报原因:
原因补充:

(最多只允许输入30个字)