SSE(Server-Sent Events) 服务端向浏览器推送消息的实现
来源:互联网 发布:php curl get请求参数 编辑:程序博客网 时间:2024/05/17 21:59
在web项目中,我们经常使用的数据获取方式是:浏览器向服务端发起请求。而在某些场景下,我们可能需要服务端主动向浏览器发送消息,例如:新的信息流到达。
为了实现这个功能,最笨的方法是采用轮询请求,而最完整的是WebSocket,今天我们要探讨的SSE是介于两者之间的,SSE全称是Server-Sent Events,服务端发送事件,其是基于http协议的,在浏览器与服务器建立连接之后,服务端向浏览器主动发送消息,消息的格式是以”data:”开头,以”\n\n“结尾。
话不多说,直接看代码:
在servlet 3.0支持@WebServlet注解,可用于注册服务。运行环境则需要Tomcat 7及以上版本。
服务端代码:
SseControler.java
package io.hexin;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet("/msg" )public class SseControler extends HttpServlet { private static final long serialVersionUID = -8248240713081774034L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType( "text/event- stream;charset=UTF-8" ); response.setHeader( "Cache-Control", "no-cache" ); response.setHeader( "Connection", "keep-alive" ); PrintWriter out = response.getWriter(); try { for(int i=0; i<10; i++){ Thread. sleep(10000); String msg = "测试信息:" +new Date(); out.print( "data: " + msg + "\n" ); out.flush(); } } catch (Exception e) { e.printStackTrace(); } }}
页面代码:
SseHtml.html
<!DOCTYPE html><html> <head > <title >SseHtml.html </title> <meta name="keywords" content="keyword1,keyword2,keyword3" > <meta name="description" content= "this is my page"> <meta name="content-type" content= "text/html; charset=UTF-8"> <script type="text/javascript" src="./jquery-2.1.4.min.js" > </script> </head > <body > <div id="msgDiv"></ div> </body > <script type="text/javascript"> var requestPath = "http://localhost:8082/SseServerDemo" ; if(typeof (EventSource) !== "undefined" ) { var source = new EventSource(requestPath+ "/msg"); source.onmessage = function(event) { var _html = event.data; $( "#msgDiv").append(_html+"</br>" ); //source.close(); //关闭连接 }; } else{ tool.msg( "当前浏览器不兼容,请换用chrome" ); } </script ></html>
执行结果:
onmessage是消息到达事件,close是关闭连接。浏览器在没有信息返回时,默认是3秒重新建立连接。
参考资料:
SSE:服务器发送事件 http://javascript.ruanyifeng.com/htmlapi/eventsource.html
(全文完)
我的微博:http://weibo.com/ahmumu
0 0
- SSE(Server-Sent Events) 服务端向浏览器推送消息的实现
- Server-Sent Events实现服务端单向推送消息事件
- Server-Sent Events和WebSocket服务器向浏览器推送信息
- SSE(Server-sent Events)
- 服务端数据推送方式-SSE(server-sent event)
- HTML5服务器推送消息之Server-Sent Events
- HTML5数据推送(server-sent-events)的简单Java实例
- 服务端数据推送方式-SSE(server-sent event)简介及上手小demo
- 服务端向客户端推送消息-Dwr实现
- 使用HTML5的Server-sent技术,Go服务器向页面推送消息
- pushlet实现服务端推送消息到浏览器
- pushlet实现服务端推送消息到浏览器
- Server-sent Events---HTML5 服务器推送事件(Server-sent Events)实战开发
- Html5 服务端推送 Server-Sent Event
- 浏览器向服务端发送的消息信息
- 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)
- 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)
- 服务端推送消息至浏览器
- 数据库范式
- Rabin数字签名 Lamport 一次签名
- PHP+MSSQL Laravel框架下链接
- 神奇的Block
- 房子模型开门、关门操作
- SSE(Server-Sent Events) 服务端向浏览器推送消息的实现
- Java基础-数据类型
- HDU 2600 War
- 抽象工厂模式 AbstractFactory
- kmp模板
- bootstrap在线模板
- No4 私人通讯录
- eslipse选中高亮设置
- 《剑指offer》——二叉树的深度