Spring 5 og Servlet 4 - PushBuilder

1. Introduktion

Server Push-teknologien - en del af HTTP / 2 (RFC 7540) - giver os mulighed for at sende ressourcer til klienten proaktivt fra serversiden. Dette er en større ændring fra HTTP / 1.X pull-baseret tilgang.

En af de nye funktioner, som Spring 5 bringer - er serverens push-support, der kommer med Jakarta EE 8 Servlet 4.0 API. I denne artikel undersøger vi hvordan man bruger server push og integrerer det med Spring MVC controllere.

2. Maven-afhængighed

Lad os starte med at definere afhængigheder, vi skal bruge:

 org.springframework spring-webmvc 5.2.8.RELEASE javax.servlet javax.servlet-api 4.0.0 forudsat 

De seneste versioner af spring-mvc og servlet-api findes på Maven Central.

3. HTTP / 2-krav

For at bruge server push skal vi kør vores applikation i en container, der understøtter HTTP / 2 og Servlet 4.0 API. Konfigurationskrav for forskellige containere kan findes her i Spring wiki.

Derudover vil vi brug for HTTP / 2 support på klientsiden; selvfølgelig har de fleste aktuelle browsere denne support.

4. PushBuilder Funktioner

Det PushBuilder interface er ansvarlig for implementering af server push. I foråret MVC kan vi injicere en PushBuilder som et argument for de metoder, der er kommenteret med @RequestMapping.

På dette tidspunkt er det vigtigt at overveje, at - hvis klienten ikke har HTTP / 2 support - vil referencen blive sendt som nul.

Her er den centrale API, der tilbydes af PushBuilder grænseflade:

  • sti (streng sti) - angiver den ressource, vi sender
  • skub () - sender ressourcen til klienten
  • addHeader (strengnavn, strengværdi) - angiver det overskrift, som vi bruger til den skubbede ressource

5. Hurtigt eksempel

For at demonstrere integrationen opretter vi demo.jsp side med en ressource - logo.png:

     PushBuilder demo PushBuilder demo

Vi udsætter også to slutpunkter med PushController controller - en der bruger server push og en anden der ikke:

@Controller public class PushController {@GetMapping (path = "/ demoWithPush") public String demoWithPush (PushBuilder pushBuilder) {if (null! = PushBuilder) {pushBuilder.path ("resources / logo.png"). Push (); } returner "demo"; } @GetMapping (sti = "/ demoWithoutPush") offentlig String demoWithoutPush () {returner "demo"; }}

Ved hjælp af Chrome-udviklingsværktøjerne kan vi se forskellene ved at kalde begge slutpunkter.

Når vi kalder demoWithoutPush metode, visningen og ressourcen offentliggøres og forbruges af klienten ved hjælp af pull-teknologien:

Når vi kalder demoWithPush metode, kan vi se brugen af ​​push-serveren, og hvordan ressourcen leveres på forhånd af serveren, hvilket resulterer i en lavere indlæsningstid:

Server push-teknologien kan forbedre indlæsningstiden for siderne i vores applikationer i mange scenarier. Når det er sagt, er vi nødt til at overveje, at selvom vi mindsker latenstiden, kan vi øge båndbredden - afhængigt af antallet af ressourcer, vi betjener.

Det er også en god ide at kombinere denne teknologi med andre strategier såsom caching, ressourceminificering og CDN og at køre præstationstest på vores applikation for at bestemme de ideelle slutpunkter til brug af server push.

6. Konklusion

I denne hurtige vejledning så vi et eksempel på, hvordan man bruger server push-teknologi med Spring MVC ved hjælp af PushBuilder interface, og vi sammenlignede belastningstiderne, når du bruger den, mod standard pull-teknologien.

Som altid er kildekoden tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found