Primavera 5 e Servlet 4 - O PushBuilder

Primavera 5 e Servlet 4 - O PushBuilder

1. Introdução

A tecnologia Server Push - parte do HTTP / 2 (RFC 7540) - nos permite enviar recursos para o cliente de forma proativa do lado do servidor. Essa é uma grande alteração da abordagem baseada em pull HTTP / 1.X.

Um dos novos recursos que o Spring 5 traz - é o suporte a push do servidor fornecido com a API do Java EE 8 Servlet 4.0. Neste artigo, exploraremoshow to use server push and integrate it with Spring MVC controllers.

2. Dependência do Maven

Vamos começar definindo as dependências que vamos usar:


    org.springframework
    spring-webmvc
    5.0.2.RELEASE


    javax.servlet
    javax.servlet-api
    4.0.0
    provided

As versões mais recentes despring-mvceservlet-api podem ser encontradas no Maven Central.

3. HTTP/2 Requirements

Para usar push de servidor, precisamosrun our application in a container that supports HTTP/2 and the Servlet 4.0 API. Os requisitos de configuração de vários contêineres podem ser encontrados aqui, emSpring wiki.

Além disso, vamosneed HTTP/2 support on the client-side; claro, a maioria doscurrent browsers tem esse suporte.

4. Recursos dePushBuilder

A interfacePushBuilder é responsável pela implementação de push de servidor. No Spring MVC, podemos injetar umPushBuilder como um argumento dos métodos anotados com@RequestMapping.

Neste ponto, é importante considerar que -if the client doesn’t have HTTP/2 support – the reference will be sent as null.

Aqui está a API principal oferecida pela interfacePushBuilder:

  • path (String path) – indica o recurso que iremos enviar

  • push() – envia o recurso para o cliente

  • addHeader (String name, String value) – indica o cabeçalho que usaremos para o recurso enviado

5. Exemplo rápido

Para demonstrar a integração, criaremos a páginademo.jsp com um recurso -logo.png:

<%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>



PushBuilder demo


    PushBuilder demo
    
" alt="Logo" height="126" width="411">

Também exporemos dois endpoints com o controladorPushController - um que usa push de servidor e outro que não:

@Controller
public class PushController {

    @GetMapping(path = "/demoWithPush")
    public String demoWithPush(PushBuilder pushBuilder) {
        if (null != pushBuilder) {
            pushBuilder.path("resources/logo.png").push();
        }
        return "demo";
    }

    @GetMapping(path = "/demoWithoutPush")
    public String demoWithoutPush() {
        return "demo";
    }
}

Usando as ferramentas de desenvolvimento do Chrome, podemos ver as diferenças chamando os dois pontos de extremidade.

Quando chamamos o métododemoWithoutPush, a visualização e o recurso são publicados e consumidos pelo cliente usando a tecnologia pull:

image Quando chamamos o métododemoWithPush, podemos ver o uso do servidor push e como o recurso é entregue antecipadamente pelo servidor, resultando em um menor tempo de carregamento:

image A tecnologia server push pode melhorar o tempo de carregamento das páginas de nossos aplicativos em muitos cenários. Dito isto, precisamos considerar que, embora diminuamos a latência, podemos aumentar a largura de banda - dependendo do número de recursos que servimos.

Também é uma boa ideia combinar essa tecnologia com outras estratégias, comoCaching,Resource Minification e CDN, e executar testes de desempenho em nosso aplicativo para determinar os endpoints ideais para usar push de servidor.

6. Conclusão

Neste tutorial rápido, vimos um exemplo de como usar a tecnologia server push com Spring MVC usando a interfacePushBuilder, e comparamos os tempos de carregamento ao usá-la com a tecnologia pull padrão.

Como sempre, o código-fonte está disponívelover on GitHub.