2016-10-15 23 views
6

giả sử tôi có mã Java sau.Làm cách nào để liên tục hiển thị trang FTL, hãy cho biết bằng các bản cập nhật?

get("/", (request, response) -> { 
    Map<String, Object> attributes = new HashMap<>(); 

    //attributes.put("message", "Hello World!"); 

    return new ModelAndView(attributes, "index.ftl"); 
}, new FreeMarkerEngine()); 

Đó là từ Spark. Khi tôi điều hướng đến localhost: portnumber /, tôi thấy index.ftl được hiển thị, giả sử (không được mã hóa ở đây) hiển thị dữ liệu từ cơ sở dữ liệu cho ứng dụng này. Nhưng hãy nói rằng tôi muốn cập nhật động index.ftl. Giả sử một người dùng khác đã cập nhật cơ sở dữ liệu (không được mã hóa ở đây) từ một cá thể khác của ứng dụng và tôi muốn hiển thị các thay đổi mới trong index.ftl trên trang của người dùng đầu tiên. Làm thế nào điều này sẽ được thực hiện mà không cần phải tái render các trang?

Bạn không thể chỉ đơn giản là có bộ đếm thời gian ở phía Java để lấy dữ liệu mới cứ 10-20 mili giây một lần. Đó sẽ là một sự lãng phí thời gian kết nối lớn. Mã Java có thể được ping bằng cách nào đó mà cơ sở dữ liệu đã được cập nhật không? Giống như một người nghe cho cơ sở dữ liệu?

Không chỉ là một vấn đề, nhưng làm cách nào bạn có thể đẩy dữ liệu mới nhận được vào index.ftl mà không cần phải quay lại?

+0

Bạn có nghĩa là một cái gì đó như [Server-Sent Events] (https : //developer.mozilla.org/en-US/docs/Web/API/Server-sent_events)? – UnholySheep

+0

Hoặc cách khác [Websockets] (https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) (theo [this tutorial] (https://sparktutorials.github.io/2015/11 /08/spark-websocket-chat.html)) – UnholySheep

+0

@UnholySheep Đó là chính xác những gì tôi có ý nghĩa, nhưng đối với một phụ trợ Java thay thế. Trong Javascript, AJAX là con đường để đi. Làm cách nào để tôi gửi yêu cầu được máy chủ gửi trong khung công tác Spark? – user41912

Trả lời

1

Bạn có thể đẩy dữ liệu đến trình duyệt bằng cách sử dụng COMET

Có một số kỹ thuật COMET khác nhau mà bạn có thể sử dụng để đạt được hiệu quả. Tôi đã tìm thấy rất comprehensive article hữu ích khi so sánh và chọn giữa chúng.


Sau khi sử dụng COMET, bạn có thể utilize this trick để bạn chỉ làm mới các nội dung trong một thẻ <div>


Một reference

Các vấn đề liên quan