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.