前端实时消息提示的效果-websocket长轮询
WebSocket是html5新增加的特性之一,可以实现客户端和服务器彼此之间相互通信,也可以实现跨域通信,目前大部分主流浏览器都支持,iE浏览器需要10版本以上。
需求:公司项目有一个报警模块,当后台接收到报警消息之后,需要及时的推送到浏览器上,显示给用户。
效果图如下:

参考代码如下:
jsp代码:
<%@ page contentType="text/html;charset=UTF-8" language="java"%>
<div class="page-header navbar navbar-fixed-top">
<div class="page-header-inner">
<div class="page-logo">
<a href="<c:url value="/"/>"><img
src="<c:url value="/img/logo.png"/>" style="height: 14px" alt="logo"
class="logo-default" /></a>
<div class="menu-toggler sidebar-toggler hide"></div>
</div>
<a href="javascript:;" class="menu-toggler responsive-toggler"
data-toggle="collapse" data-target=".navbar-collapse"></a>
<div class="top-menu">
<ul class="nav navbar-nav pull-right">
<li class="dropdown dropdown-alert"><a href="#"
class="dropdown-toggle" data-toggle="dropdown"
data-hover="dropdown" data-close-others="true"> <span
class="badge pull-left"></span><label class="hidden-sm">报警</label><i
class="fa fa-bell"></i>
</a>
<ul class="dropdown-menu">
</ul></li>
<li class="dropdown dropdown-user"><a href="#"
class="dropdown-toggle" data-toggle="dropdown"
data-hover="dropdown" data-close-others="true"> <span
class="username username-hide-on-mobile">你好,${sessionScope.username}</span>
<i class="fa fa-angle-down"></i>
</a>
<ul class="dropdown-menu">
<li><a href="javascript:;" id="updatePass"><i
class="icon-lock"></i>修改密码</a></li>
<li><a href="<c:url value="/logout"/> "><i
class="icon-key"></i>退出登录</a></li>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearfix"></div>
<script>
//toastr.sos(num1)
</script>
<script type="text/javascript"
src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
<script type="text/javascript"
src="http://cdn.bootcss.com/sockjs-client/1.1.1/sockjs.js"></script>
<script type="text/javascript">
function wsPath() {
var pathName = window.document.location.pathname;
var host = window.location.host;
var projectName = pathName.substring(0,
pathName.substr(1).indexOf('/') + 1);
return (host + projectName);
}
wsPath = wsPath();
var websocket = null;
if ('WebSocket' in window) {
websocket = new WebSocket("ws://" + wsPath + "/websocket/socketServer");
} else if ('MozWebSocket' in window) {
websocket = new MozWebSocket("ws://" + wsPath
+ "/bison/websocket/socketServer");
} else {
websocket = new SockJS("http://" + wsPath
+ "/bison/sockjs/socketServer");
}
websocket.onmessage = onMessage;
websocket.onope = onOpen;
websocket.onerror = onError;
websocket.onclose = onClose;
function onOpen() {
}
function onMessage(evt) {
var $uncheckedAlertMenuBtn = $("a.dropdown-toggle", $uncheckedAlertMenu);
var $uncheckedAlertBadge = $("span.badge", $uncheckedAlertMenuBtn);
var $uncheckedAlertMenu = $('li.dropdown-alert');
var $uncheckedAlertList = $('ul', $uncheckedAlertMenu);
var a = $uncheckedAlertBadge.html();
$uncheckedAlertBadge.html(Number(a) + 1);
//判断报警类型 如果是位置偏移,place+1
if (evt.data == "1") {
var count;
var a = $("#number").html();
if (a == null) {
count = 1;
$uncheckedAlertList
.prepend('<li class="place-alert"><a href="alert?menuId=274"> <font color="red" id="place-alert">'
+ "位置报警(<font id ='number'>"
+ count
+ "</font>)" + '</font></a></li>');
} else {
count = Number(a) + 1;
$("#place-alert").html(
"位置偏移(<font id='number'>" + count + "</font>)");
}
}
if (evt.data == "0") {
var count;
var a = $("#snum").html();
if (a == null) {
count = 1;
$uncheckedAlertList
.prepend('<li class="sos-alert"> <a href="alert?menuId=274"><font color="red" id="sos-alert">'
+ "SOS报警(<font id='snum'>"
+ count
+ ")</font>"
+ '</font></a></li>');
} else {
count = Number(a) + 1;
$("#sos-alert").html(
"SOS报警(<font id='snum'>" + count + "</font>)");
}
}
}
function onError() {
websocket.close();
}
function onClose() {
}
window.close = function() {
websocket.onclose();
}
</script>
前端实时消息提示的效果-websocket长轮询的更多相关文章
- 长轮询和Comet
长轮询方式是由前端定时发起AJAX请求,若请求到数据则把数据显示出来. comet方式是由客户端与服务器端发起一个长连接,然后客户端通过监听事件的方式,来对服务器端返回的数据作出响应和处理. 实时性要 ...
- php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室)
php websocket-网页实时聊天之PHP实现websocket(ajax长轮询和websocket都可以时间网络聊天室) 一.总结 1.ajax长轮询和websocket都可以时间网络聊天室 ...
- WebSocket知识、轮询、长轮询、长连接
一.WebSocket理论知识 1.什么是websocket WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,比如说,服务器可以在任意时刻发送消 ...
- 轮询、长轮询和websocket
一.轮询 在一些需要进行实时查询的场景下应用比如投票系统: 大家一起在一个页面上投票 在不刷新页面的情况下,实时查看投票结果 1.后端代码 from flask import Flask, rende ...
- python之轮询、长轮询、websocket
轮询 ajax轮询 ,ajax轮询 的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息. 1.后端代码 from flask import Flask,render_templat ...
- 你想了解的轮询、长轮询和websocket都在这里了
日常生活中,有很多需要数据的实时更新,比如群聊信息的实时更新,还有投票系统的实时刷新等 实现的方式有很多种,比如轮询.长轮询.websocket 轮询 轮询是通过设置页面的刷新频率(设置多长时间自动刷 ...
- 长连接、短连接、长轮询和WebSocket
//转发,格式待整理 2017-08-0519784View0 对这四个概念不太清楚,今天专门搜索了解一下,总结一下: 长连接:在HTTP 1.1,客户端发出请求,服务端接收请求,双方建立连接,在服务 ...
- 1.轮询、长轮询、websocket简介
一.轮询 前端每隔固定时间向后台发送一次请求,询问服务器是否有新数据 缺点: 延迟,需要固定的轮询时间,不一定是实时数据 大量耗费服务器内存和宽带资源,因为不停的请求服务器,很多时候 并没有新的数 ...
- 网页实时聊天之js和jQuery实现ajax长轮询
众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...
随机推荐
- adb logcat 使用
之前打印log的时候,使用的是别人配置好的快捷键,结果现在快捷键没有配置,具体的log命令就不会了.今天上网查了一下,记录下来 打印的log是 android.util.Log.e("zha ...
- android 图片特效处理之光照效果
这篇将讲到图片特效处理的光照效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理:图片上面的像素点按照给定圆心,按照圆半径的变化,像素点的RGB值分别加上相应的值作为当前点的RGB值. 例: ...
- Android自定义组件系列【13】——Android自定义对话框如此简单
在我们的日常项目中很多地方会用到对话框,但是Android系统为我们提供的对话框样子和我们精心设计的界面很不协调,在这种情况下我们想很自由的定义对话框,或者有的时候我们的对话框是一个图片,没有标题和按 ...
- Kinect 开发 —— 硬件设备解剖
Kinect for Xbox: 360 不支持“近景模式” 三只眼睛 —— 红外投影机,RGB摄像头,红外深度投影头 —— 色彩影像中的每个像素分别与深度影像中的一个像素对应 四只耳朵 —— L形 ...
- POJ——T 2752 Seek the Name, Seek the Fame
http://poj.org/problem?id=2752 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 20418 ...
- Mindjet MindManager 思维导图软件-使用思维导图跟踪调用流程,绘制软件框架
思维导图.据说是每一个产品经理必备的软件.假设你阅读大型源码.使用思维导图跟踪调用流程,绘制软件框架将会很方便. 特点:没什么好说的.用过的都说好. 软件截图: 下载:http://www.mindm ...
- php7 兼容 MySQL 相关函数
php7 兼容 MySQL 相关函数 PHP7 废除了 ”mysql.dll” ,推荐使用 mysqli 或者 pdo_mysql http://PHP.net/manual/zh/mysqlinfo ...
- read()方法读取的是一个字节,为什么返回是int,而不是byte
因为字节输入流可以操作任意类型的文件,比如图片音频等,这些文件底层都是以二进制形式的存储的,如果每次读取都返回byte,有可能在读到中间的时候遇到111111111 那 ...
- Spring异步执行(@Async)2点注意事项
Spring中可以异步执行代码,注解方式是使用@Async注解. 原理.怎么使用,就不说了. 写2点自己遇到过的问题. 1.方法是公有的 // 通知归属人 @Async public void not ...
- 高中生活-第9篇-开学之初的“失足”囧事,"刻舟求剑"导致腿折了
时间过得好快啊,上次发表"高中生活-第8篇:夏天的空调,冬天的味道"是2014年9月30日,一转眼,就是一年啊. 我自己以为,很多人可能都以为,我又半途而废了,实则不是哦~ 行百里 ...