【问题标题】:How to refresh the view using websocket getting the data from database如何使用 websocket 从数据库中获取数据来刷新视图
【发布时间】:2017-12-22 11:52:20
【问题描述】:

我需要刷新部分视图而不刷新整个页面。

在我的 index.html 页面上,我有三个面板,其中一个按状态显示工单的数量,每次创建或更新新工单时我都需要刷新这个数字。我使用 Java 和 Spring Boot 和 Thymelaf 来构建我的应用程序。

这是我的看法:

这就是我现在的做法:

model.addAttribute("resolvedTickets", atendimentoService.findAllTicketsByStatus(STATUS_RESOLVED).size());

我曾尝试使用 web sockets,但我不知道如何获取它并刷新面板。

【问题讨论】:

    标签: javascript java spring-boot thymeleaf java-websocket


    【解决方案1】:

    在标准网络交互中,客户端(即您的网络浏览器)向您的服务器发送请求。您的服务器接收到请求,并将信息发回以显示在您的浏览器中然后终止连接

    WebSockets 是一种在客户端和服务器之间创建持久的双向连接的方法,但它需要双方的合作。很多共享服务器不允许 WebSockets,所以你首先必须确保你的服务器能够提供 WebSockets。 (我从您的屏幕截图中看到您正在 Heroku 上运行,运行 WebSockets 应该没有问题。)

    在服务器端,您需要设置对传入 WebSocket 请求的处理。我不知道你用什么语言编写了你的​​服务器,所以我不能提供任何指导,但是有很多库可以在大多数语言中完成 WebSockets 的服务器端部分。

    在客户端,您需要设置 WebSocket 客户端。 MDN 在 WebSockets 上有 a great guide,它解释了您需要做什么。基本上,您所要做的就是监听传入的消息并增加您的计数器。

    var count = 0;
    var exampleSocket = new WebSocket("ws://example.com/socket");
    exampleSocket.onmessage = function(event) {
        count++;
        document.getElementById('myTicketCounter').innerHTML = count;
    }
    

    在某些方面,WebSockets 是多余的。如果您发现工作量太大而奖励太少,您也可以设置一个 AJAX 调用,每隔几分钟触发一次,它会 ping 您服务器上的另一个页面,并相应地返回票证数量和更新。它不会是瞬时的,但如果您不需要精确到秒的分辨率,它可能就足够了。您可以根据需要将时间间隔调整为尽可能长或尽可能短(在一定程度上;用不断的请求轰炸您的服务器会减慢您的速度)。

    【讨论】:

    • 嗨!非常感谢你的 aswner。我正在使用 Java 和 Spring Boot 来构建我的应用程序。
    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多