Spring 5 og Servlet 4 - PushBuilder

1. Introduksjon

Server Push-teknologien - en del av HTTP / 2 (RFC 7540) - lar oss sende ressurser til klienten proaktivt fra serversiden. Dette er en stor endring fra HTTP / 1.X pull-basert tilnærming.

En av de nye funksjonene som Spring 5 gir - er serverstøttestøtten som kommer med Jakarta EE 8 Servlet 4.0 API. I denne artikkelen vil vi utforske hvordan du bruker server push og integrerer den med Spring MVC-kontrollere.

2. Maven avhengighet

La oss starte med å definere avhengigheter vi skal bruke:

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

De nyeste versjonene av vår-mvc og servlet-api finner du på Maven Central.

3. HTTP / 2 Krav

For å bruke server push, må vi kjør applikasjonen vår i en container som støtter HTTP / 2 og Servlet 4.0 API. Konfigurasjonskrav til forskjellige containere finner du her i vår-wiki.

I tillegg vil vi trenger HTTP / 2-støtte på klientsiden; selvfølgelig har de fleste nåværende nettlesere denne støtten.

4. PushBuilder Funksjoner

De PushBuilder grensesnitt er ansvarlig for implementering av server push. På våren MVC kan vi injisere en PushBuilder som et argument for metodene kommentert med @RequestMapping.

På dette punktet er det viktig å vurdere at - Hvis klienten ikke har HTTP / 2-støtte - vil referansen bli sendt som null.

Her er kjernen API som tilbys av PushBuilder grensesnitt:

  • sti (strengsti) - indikerer ressursen vi skal sende
  • trykk () - sender ressursen til klienten
  • addHeader (strengnavn, strengverdi) - angir overskriften som vi bruker for den pressede ressursen

5. Rask eksempel

For å demonstrere integrasjonen, oppretter vi demo.jsp side med én ressurs - logo.png:

     PushBuilder demo PushBuilder demo

Vi avslører også to endepunkter med PushController kontroller - en som bruker server push og en annen som ikke gjør det:

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

Ved hjelp av verktøyene for Chrome-utvikling kan vi se forskjellene ved å ringe til begge sluttpunktene.

Når vi kaller demoWithoutPush metode, blir visningen og ressursen publisert og konsumert av klienten ved hjelp av pull-teknologien:

Når vi kaller demoWithPush metode, kan vi se bruken av push-serveren og hvordan ressursen leveres på forhånd av serveren, noe som resulterer i en lavere lastetid:

Server push-teknologien kan forbedre lastetiden til sidene til applikasjonene våre i mange scenarier. Når det er sagt, må vi vurdere at selv om vi reduserer ventetiden, kan vi øke båndbredden - avhengig av antall ressurser vi betjener.

Det er også en god ide å kombinere denne teknologien med andre strategier som Caching, Resource Minification og CDN, og å kjøre ytelsestester på applikasjonen vår for å bestemme de ideelle endepunktene for bruk av server push.

6. Konklusjon

I denne raske opplæringen så vi et eksempel på hvordan du bruker server push-teknologi med Spring MVC ved hjelp av PushBuilder grensesnitt, og vi sammenlignet belastningstidene når vi bruker den mot standard pull-teknologi.

Som alltid er kildekoden tilgjengelig på GitHub.


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