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

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

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


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


效果图如下:

参考代码如下:

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>
相关文章
|
7月前
|
前端开发 网络协议 JavaScript
|
2月前
|
JavaScript 前端开发 测试技术
前端全栈之路Deno篇(五):如何快速创建 WebSocket 服务端应用 + 客户端应用 - 可能是2025最佳的Websocket全栈实时应用框架
本文介绍了如何使用Deno 2.0快速构建WebSocket全栈应用,包括服务端和客户端的创建。通过一个简单的代码示例,展示了Deno在WebSocket实现中的便捷与强大,无需额外依赖,即可轻松搭建具备基本功能的WebSocket应用。Deno 2.0被认为是最佳的WebSocket全栈应用JS运行时,适合全栈开发者学习和使用。
135 7
|
7月前
|
消息中间件 前端开发 JavaScript
【前端】websocket 讲解与项目中的使用
【前端】websocket 讲解与项目中的使用
|
7月前
|
前端开发 网络协议 JavaScript
如何在前端实现WebSocket发送和接收TCP消息(多线程模式)
请确保在你的服务器端实现WebSocket的处理,以便它可以接受和响应前端发送的消息。同时,考虑处理错误情况和关闭连接的情况以提高可靠性。
551 0
|
7月前
|
前端开发 Java API
WebSocket vs SSE: 实时数据推送到前端的选择与实现(详细)
WebSocket vs SSE: 实时数据推送到前端的选择与实现(详细)
1455 0
|
7月前
|
Dart 小程序 前端开发
WebSocket 解析与应用(包含web前端、服务端、小程序、dart/flutter中的用法)
WebSocket 解析与应用(包含web前端、服务端、小程序、dart/flutter中的用法)
876 0
|
5月前
|
前端开发 网络协议 JavaScript
在Spring Boot中实现基于WebSocket的实时通信
在Spring Boot中实现基于WebSocket的实时通信
|
2月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
495 1
|
2月前
|
前端开发 Java C++
RSocket vs WebSocket:Spring Boot 3.3 中的两大实时通信利器
本文介绍了在 Spring Boot 3.3 中使用 RSocket 和 WebSocket 实现实时通信的方法。RSocket 是一种高效的网络通信协议,支持多种通信模式,适用于微服务和流式数据传输。WebSocket 则是一种标准协议,支持全双工通信,适合实时数据更新场景。文章通过一个完整的示例,展示了如何配置项目、实现前后端交互和消息传递,并提供了详细的代码示例。通过这些技术,可以大幅提升系统的响应速度和处理效率。
|
4月前
|
开发框架 网络协议 Java
SpringBoot WebSocket大揭秘:实时通信、高效协作,一文让你彻底解锁!
【8月更文挑战第25天】本文介绍如何在SpringBoot项目中集成WebSocket以实现客户端与服务端的实时通信。首先概述了WebSocket的基本原理及其优势,接着详细阐述了集成步骤:添加依赖、配置WebSocket、定义WebSocket接口及进行测试。通过示例代码展示了整个过程,旨在帮助开发者更好地理解和应用这一技术。
408 1