JS实现websocket长轮询实时消息提示的效果


Posted in Javascript onOctober 10, 2017

效果图如下:

JS实现websocket长轮询实时消息提示的效果

参考代码如下:

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=" rel="external nofollow" rel="external nofollow" /"/>"><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:;" rel="external nofollow" rel="external nofollow" 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="#" rel="external nofollow" rel="external nofollow" 
          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="#" rel="external nofollow" rel="external nofollow" 
          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:;" rel="external nofollow" rel="external nofollow" id="updatePass"><i
                class="icon-lock"></i>修改密码</a></li>
            <li><a href="<c:url value=" rel="external nofollow" rel="external nofollow" /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" rel="external nofollow" rel="external nofollow" > <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" rel="external nofollow" rel="external nofollow" ><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>

总结

以上所述是小编给大家介绍的JS实现websocket长轮询实时消息提示的效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
ExtJS 设置级联菜单的默认值
Jun 13 Javascript
jquery load事件(callback/data)使用方法及注意事项
Feb 06 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
Apr 23 Javascript
基于JS2Image实现圣诞树代码
Dec 24 Javascript
概述javascript在Google IE中的调试技巧
Nov 24 Javascript
Vue.js组件tabs实现选项卡切换效果
Dec 01 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
Dec 20 Javascript
JavaScript实现选项卡效果的分析及步骤
Apr 16 Javascript
JS原型与继承操作示例
May 09 Javascript
通过js示例讲解时间复杂度与空间复杂度
Aug 06 Javascript
微信小程序实现吸顶效果
Jan 08 Javascript
小程序实现文字循环滚动动画
Jun 14 Javascript
JavaScript中错误正确处理方式小结你用对了吗
Oct 10 #Javascript
vue.js实现简单轮播图效果
Oct 10 #Javascript
seajs中最常用的7个功能、配置示例
Oct 10 #Javascript
SeaJS中use函数用法实例分析
Oct 10 #Javascript
vue.js如何将echarts封装为组件一键使用详解
Oct 10 #Javascript
seajs模块压缩问题与解决方法实例分析
Oct 10 #Javascript
基于vue的换肤功能的示例代码
Oct 10 #Javascript
You might like
php MessagePack介绍
2013/10/06 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
php生成无限栏目树
2017/03/16 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
2017/08/11 PHP
ThinkPHP 5.1 跨域配置方法
2019/10/11 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
详解在Vue中如何使用axios跨域访问数据
2017/07/07 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
nodejs文件夹深层复制功能
2019/09/03 NodeJs
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
粗略分析Python中的内存泄漏
2015/04/23 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
详解django中自定义标签和过滤器
2017/07/03 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
Django使用Channels实现WebSocket的方法
2019/07/28 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
苏格兰领先的多渠道鞋店:Begg Shoes
2019/10/22 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
市场营销战略计划书
2014/05/06 职场文书
2014年军人思想汇报范文
2014/10/12 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
教师求职自荐信范文
2015/03/04 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
Flask搭建一个API服务器的步骤
2021/05/28 Python