• 前端实时消息提示的效果-websocket长轮询


    WebSocket是html5新增加的特性之一,可以实现客户端和服务器彼此之间相互通信,也可以实现跨域通信,目前大部分主流浏览器都支持,iE浏览器需要10版本以上。

    需求:公司项目有一个报警模块,当后台接收到报警消息之后,需要及时的推送到浏览器上,显示给用户。

    效果图如下:


    5640239-7bc3e070cf956db2.png
    1037884-20170810142855105-1549463663.png

    参考代码如下:
    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>
    
  • 相关阅读:
    C++与AS3
    基于Hadoop的大数据平台实施记——整体架构设计
    as3用鼠标拖动图形拼图——灰常简单的教程
    as3 与js相互通信
    cocos2d-x获取系统时间
    lucene3.6笔记添加搜索功能
    Ubuntu小私房(3)--Uubutnu启动美化大变身
    C++一维数组和指针的关系总结
    poj2486 Apple Tree (树形dp)
    opencv 中cvZero()的使用
  • 原文地址:https://www.cnblogs.com/wangting888/p/9702105.html
Copyright © 2020-2023  润新知