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 DOM 添加事件
Feb 14 Javascript
Extjs在exlipse中设置自动提示的方法
Apr 07 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
Aug 14 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
jQuery 事件的命名空间简单了解
Nov 22 Javascript
中止javascript执行的方法
Feb 14 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
Nov 24 Javascript
创建一个类Person的简单实例
May 17 Javascript
Webpack 服务器端代码打包的示例代码
Sep 19 Javascript
vue 虚拟dom的patch源码分析
Mar 01 Javascript
详解vscode中vue代码颜色插件
Oct 11 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
Jun 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
多php服务器实现多session并发运行
2006/10/09 PHP
shopex中集成的站长统计功能的代码简单分析
2011/08/11 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
laravel框架使用极光推送消息操作示例
2020/02/15 PHP
jquery获取一组checkbox的值(实例代码)
2013/11/04 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
vue组件的写法汇总
2018/04/12 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
通过实例学习React中事件节流防抖
2019/06/17 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
python中open函数的基本用法示例
2019/09/07 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
通过Python实现一个简单的html页面
2020/05/16 Python
python使用QQ邮箱实现自动发送邮件
2020/06/22 Python
零基础学python应该从哪里入手
2020/08/11 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
世界上最受欢迎的花店:1-800-Flowers.com
2020/06/01 全球购物
社区学雷锋活动策划方案
2014/01/30 职场文书
小溪流的歌教学反思
2014/02/13 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
医院搬迁方案
2014/06/14 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
Spring boot admin 服务监控利器详解
2022/08/05 Java/Android