Tìm hiểu về Server Push trong Java

Server Push là một tính năng mới giúp cải tiến về mặt performance cho ứng dụng web được định nghĩa trong chuẩn HTTP/2. Nó giúp chúng ta có thể đẩy các hình ảnh, tập tin CSS, tập tin Javascript và những resource khác về client trước khi request từ client được xử lý hoàn tất. Nhờ vậy, ngay khi response kết quả từ server về client, những resource này đã có sẵn trong cache và có thể sử dụng luôn. Server Push được bao gồm trong release của Java Servlet 4.x. Trong bài viết này, chúng ta sẽ cùng nhau tìm hiểu về Server Push trong Java hoạt động như thế nào các bạn nhé!

Đầu tiên, mình sẽ tạo một project cho ứng dụng web trong Eclipse để làm ví dụ như sau:

Tìm hiểu về Server Push trong Java

Để thấy rõ lợi ích của Server Push trong Java Servlet 4.x, giờ mình sẽ tạo một Servlet bình thường trước:

Tìm hiểu về Server Push trong Java

với nội dung như sau:

Trong HelloServlet trên, như các bạn thấy, ngoài dòng chữ “Hello World from Huong Dan Java”, mình còn return về cho client một hình ảnh là logo của Hướng Dẫn Java. Logo này nằm ở thư mục WebContent của project:

Tìm hiểu về Server Push trong Java

Lúc này, nếu chạy ứng dụng với Tomcat 9 trở lên, các bạn sẽ thấy kết quả như sau:

Tìm hiểu về Server Push trong Java

Nếu các bạn sử dụng Developer Tools của trình duyệt Chrome bằng cách chọn More Tools, sau đó chọn Developer Tools, rồi chọn tab Networks. Các bạn sẽ thấy như sau:

Tìm hiểu về Server Push trong Java

Bây giờ, chúng ta sẽ sử dụng tính năng Server Push của Java Servlet 4.x xem sao nhé các bạn.

Trong Java Servlet 4.x, interface PushBuilder được thêm vào để hiện thực tính năng Server Push của HTTP/2. Nội dung của interface này như sau:

Chúng ta có thể lấy được đối tượng PushBuilder trong Servlet của chúng ta từ đối tượng HttpServletRequest bằng cách sử dụng method newPushBuilder() của đối tượng này như sau:

Sau khi đã có đối tượng PushBuilder, chúng ta có thể sử dụng nó để đẩy tất cả các resource trong ứng dụng web của chúng ta như hình ảnh, tập tin CSS, tập tin Javascript về client.

Đầu tiên, các bạn cần khai báo đường dẫn của resource mà chúng ta muốn đẩy về client trước bằng phương thức path() của đối tượng PushBuilder như sau:

Các bạn có thể gọi nhiều lần phương thức path() để push nhiều resources cùng một lúc cũng được.

Sau khi đã khai báo tất cả các resource cần push thì các bạn hãy gọi phương thức push() của đối tượng PushBuilder để bắt đầu đẩy resource về client.

Sau khi đã push resource xong, các bạn có thể tiếp tục xử lý để return về toàn bộ nội dung của trang web. Ví dụ HelloServlet của mình có thể viết lại như sau:

Trước khi chạy lại ví dụ của chúng ta với Server Push, mình xin nói thêm một điều với các bạn là Server Push chỉ hoạt động với các kết nối bảo mật như HTTPS connection và nếu client disable Server Push thì Server Push cũng không hoạt động được các bạn ạ. Trong những trường hợp này, nếu các bạn sử dụng đối tượng HttpServletRequest để lấy đối tượng PushBuilder thì kết quả sẽ bị null.

Do đó, để chạy được ví dụ, các bạn phải cấu hình Tomcat hỗ trợ HTTP/2 với giao thức HTTPS. Để làm được điều này, các bạn hãy mở tập tin server.xml trong project Servers:

Tìm hiểu về Server Push trong Java

rồi thêm một Connector với nội dung như sau:

Xem thêm hướng dẫn Cấu hình Tomcat hỗ trợ HTTP/2 nhé các bạn.

Bây giờ, các bạn hãy chạy lại ví dụ để xem kết quả nhé.

Kết quả:

Tìm hiểu về Server Push trong Java

Như các bạn thấy, lúc này, protocol là h2 (HTTP/2) và nếu các bạn để ý cột Initiator của tập tin logo.png, các bạn sẽ thấy nó đang sử dụng Server Push đó các bạn. Ví dụ của mình chỉ sử dụng một hình ảnh nhỏ nên các bạn sẽ không thấy sự khác biệt, nhưng đối với một trang web thực tế, có hàng trăm hàng ngàn resources, các bạn sẽ thấy rõ lợi ích của Server Push.

 

5/5 - (1 bình chọn)

Add Comment