Till senaste kommentaren
Detta inlägg är gammalt och kan innehålla inaktuell information.

Effektivitetsförslag för att minska bandbredd och förfrågningar till realtids-api:t

Jag tror det är många som vill ha löpande realtidsuppdateringar för bussarna i SL-trafiken. Enklast i nuläget är att polla servern (api:t) med ett givet intervall. Problemet är att ju mindre fördröjning man vill ha, desto tätare måste man skicka förfrågningar. För att inte servern ska belastas för mycket lägger ni in begränsningar med antal requests per minut och månad.

Till att börja med är den här metoden inte särskilt smart. Oftast om man laddar om datan några sekunder senare har den inte förändrats (förutom tidsstämpeln). Det verkar som om det faktiskt bara finns nya uppdateringar att hämta kanske en gång per minut. På hållplatser med färre avgångar finns det bara ny information att hämta kanske var 5:e minut. Det är dumt att ladda ner samma information om och om igen, när det man egentligen vill ha bara är senaste ändringarna.

Jag föreslår att ni ger ut möjligheten att kunna "pusha" ut när någonting händer. Det finns flera olika sätt att göra detta på. Vanliga transportmetoder över webben ni bör kolla på är Websockets och sån där Long polling (dvs servern svarar inte förrän det finns något nytt). Det spelar väl egentligen ingen större roll vilken transportmetod som används, så länge man slipper nuvarande metoden att hela tiden behöva skicka requests för att se om något nytt har kommit, och få hela fulltexten tillbaka varje gång.

Man kan t.ex. göra så att när något av följande händer: ExpectedDateTime har ändrat på sig för någon buss, En buss har "loggat in/loggat ut" (dvs DisplayTime växlar mellan att visa minuter kvar och tidtabellstid, för avgångar < 30 min i framtiden), En buss har tillkommit i listan, En buss har försvunnit ur listan, så skickar man ut en uppdatering. Antingen en "diff" eller allting på nytt.

Bra saker: Användarna kan fortfarande få precis lika mycket information, och uppdateringar kommer direkt när den är tillgänglig. Antal inkommande requests till era servrar bör minska dramatiskt, liksom datamängden. Man kan fortfarande ha kvar det nuvarande API:t till de som inte vill ha några löpande uppdateringar. Kör man med long-polling kan det t.ex. räcka med att bara lägga till en querystring "waitForNextUpdate=true" eller något liknande.
Finns det egentligen något dåligt, förutom att ni måste orka anpassa er backend? Är det tekniskt möjligt givet det SL tillhandahåller?

Kommentarer

  • Hej Emil!
    Tack för ditt långa inlägg. En push-funktion har diskuterats tidigare i den här tråden http://kundo.se/org/trafiklabse/d/pubsub-for-re...
    och vi är tacksamma för ny input.

    Jag tror precis som du skriver, att det inte att det finns något som är dåligt egentligen, dock så är det inget som till exempel SL:s backend stödjer, så det skulle behövas en del resurser i utveckling, som inte finns just idag.

    Vi tar med oss ditt inlägg och ser om det kan bli något i framtiden.
    Om du eller någon annan har mer funderingar eller förslag, får ni gärna göra fler inlägg här, eller i den andra tråden.

    / Lars, Trafiklab

Kommentera eller skriv ett nytt inlägg

Ditt namn och inlägg kan ses av alla. Din e-post visas aldrig publikt.