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 相关文章推荐
Javascript 强制类型转换函数
May 17 Javascript
JQuery jsonp 使用示例代码
Aug 12 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
AngularJS模块管理问题的非常规处理方法
Apr 29 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
Bootstrap精简教程中秋大放送
Sep 15 Javascript
12个非常有用的JavaScript技巧
May 17 Javascript
js数据类型检测总结
Aug 05 Javascript
vue中引用swiper轮播插件的教程详解
Aug 16 Javascript
vue通过指令(directives)实现点击空白处收起下拉框
Dec 06 Javascript
最简单的vue消息提示全局组件的方法
Jun 16 Javascript
基于Vue中的父子传值问题解决
Jul 27 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文件上传(实例)
2013/10/27 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
2016/03/18 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
移动节点的jquery代码
2014/01/13 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
Ionic2开发环境搭建教程
2020/08/20 Javascript
vue父组件向子组件传递多个数据的实例
2018/03/01 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
深入理解NodeJS 多进程和集群
2018/10/17 NodeJs
layUI实现前端分页和后端分页
2019/07/27 Javascript
React-redux实现小案例(todolist)的过程
2019/09/29 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
python将字典内容存入mysql实例代码
2018/01/18 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
vue常用指令代码实例总结
2020/03/16 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
美津浓巴西官方网站:Mizuno巴西
2019/07/24 全球购物
小学教师培训方案
2014/06/09 职场文书
财务部岗位职责范本
2015/04/14 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android