Spring MVC4.1服务器端推送实现过程解析
这篇文章主要介绍了SpringMVC4.1服务器端推送实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
服务器端推送
- SSE(serversendevent)是一种服务器端向浏览器推送消息的技术,而不是我们常规的浏览器像server请求然后响应;
- 当我们需要使用server向浏览器主动推送数据的时候,请考虑使用该项技术,而不是考虑具有双向通讯功能的websocket;
- 以前我们用ajax轮询server也能实现,服务器负担大;
- sse原理是向server请求一次后,server会挂住请求不放(此时浏览器里请求状态是pending),等有数据后才返回给浏览器,然后再发起下一次请求,以此类推;
- 所有主流浏览器均支持服务器发送事件,除了InternetExplorer(6,7,8,9);
示例
服务器推送控制器
packagecom.wisely.web; importjava.util.Random; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.ResponseBody; @Controller publicclassSSEController{ //注意produces="text/event-stream" @RequestMapping(value="/push",produces="text/event-stream") public@ResponseBodyStringpush(){ Randomr=newRandom(); try{ Thread.sleep(5000); }catch(InterruptedExceptione){ e.printStackTrace(); } return"data:Testing1,2,3"+r.nextInt()+"\n\n"; } }
页面代码
" $("#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"); }
效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。