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 相关文章推荐
最新的10款jQuery内容滑块插件分享
Sep 18 Javascript
Jquery中使用setInterval和setTimeout的方法
Apr 08 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
jquery选择器-根据多个属性选择示例代码
Oct 21 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
js实现感应鼠标图片透明度变化的方法
Feb 20 Javascript
javascript 常见功能汇总
Jun 11 Javascript
JS实现选择TextArea内文本的方法
Aug 03 Javascript
简单对比分析JavaScript中的apply,call与this的使用
Dec 04 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
关于Vue Router的10条高级技巧总结
May 06 Vue.js
js之ajax文件上传
May 13 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
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
取得单条网站评论以数组形式进行输出
2014/07/28 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
php文件上传及下载附带显示文件及目录功能
2017/04/27 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
jquery序列化方法实例分析
2015/06/10 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
jQuery插件WebUploader实现文件上传
2016/11/07 Javascript
JavaScript易错知识点整理
2016/12/05 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
js中getter和setter用法实例分析
2018/08/14 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
Python3.6正式版新特性预览
2016/12/15 Python
浅谈Django REST Framework限速
2017/12/12 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
婚礼证婚人证婚词
2014/01/13 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
生活小常识广播稿
2014/09/16 职场文书
感恩教育主题班会
2015/08/12 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang