2017-07-17 92 views
0

我需要刷新部分視圖而不刷新整個頁面。如何使用websocket從數據庫中獲取數據來刷新視圖

在我的index.html頁面中,我有三個面板,其中一個顯示按狀態顯示的故障單數量,每次創建或更新新故障單時都需要刷新此數字。我用Spring Boot和Thymelaf來構建我的應用程序。

這是我的看法:

my index page

這就是我現在做的方式:

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

我曾嘗試使用網絡sockets,但我想不出如何獲得這個並刷新面板。

回答

0

在標準的Web交互中,客戶端(即您的Web瀏覽器)向您的服務器發送請求。您的服務器收到請求,然後發送回您的瀏覽器中顯示的信息,然後終止連接

WebSockets是一種在客戶端和服務器之間創建持久,雙向連接的方式,但它需要兩者的協作。許多共享服務器不允許WebSocket,因此您首先必須確保您的服務器能夠提供WebSockets。 (我從你的截圖看到你在Heroku上運行,運行WebSocket應該沒有問題。)

在服務器端,你需要設置處理傳入的WebSocket請求。我不知道你用什麼語言編寫了你的​​服務器,所以我不能提供任何指導,但是有很多庫在大多數語言的WebSockets的服務器端部分。

在客戶端,您需要設置您的WebSocket客戶端。 MDN在WebSocket上有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調用,每隔幾分鐘觸發一次,在您的服務器上打另一個頁面,並相應地返回票數和更新。它不會是瞬間的,但如果你不需要一秒一秒的解決方案,它可能就足夠了。您可以根據需要調整時間長度或縮短時間(某種程度上,使用常量請求轟擊服務器會使您的速度變慢)。

+0

嗨!非常感謝你的流氓。我正在使用Java和Spring Boot來構建我的應用程序。 –

+0

https://spring.io/guides/gs/messaging-stomp-websocket/ –

相關問題