Swift och Protobuf

Hej! Som jag förstår det så måste man använda Googles Protobuf istället för JSON ibland.
Verkar krångligare att använda, kan ni ge lite råd?
Lars Persson

Kommentarer

  • Hej Lars,

    Protobuf används som dataformat för realtidsdata i GTFS-standarden, och används därför i GTFS Regional Realtime samt GTFS Sweden 3 Realtime. Detta för att formatet är kompakt och snabbt att läsa, något som blir viktigt vid dataströmmar med mycket data som uppdateras ofta (till exempel fordonspositioner som uppdateras varje sekund för vissa operatörer).

    Det finns två sätt att gå tillvägs för att läsa protobuf data:
    - Man använder en protobuf-bibliotek (som ger stöd för protobuf formatet själv) i kombination med en .proto fil som definierar strukturen som används i GTFS-standarden.
    - Man använder en gtfs-realtime bibliotek, som gör samma sak som ovan, men där man redan har kombinerat protobuf-formatet och gtfs-strukturen till 1 bibliotek som är enklare att använda.

    Hur man läser protobuf data i olika programmeringsspråk hittar man här, med exempel i olika språk som tex C++: https://protobuf.dev/overview/

    Proto-filen för GTFS Realtime hittar man här: https://gtfs.org/documentation/realtime/gtfs-realtime.proto

    Färdiga gtfs-realtime bibliotek för olika språk hittar du här: https://github.com/MobilityData/gtfs-realtime-bindings/tree/master

    Det finns inga bibliotek specifik för Swift, eftersom realtidsdata måste kombineras med statisk data. Detta görs typiskt på en server, eftersom tex mobiltelefoner inte är lämpad för att hantera de stora statiska datamängder. Servern däremot kan kombinera realtidsdatat med det som behövs from det statiska data (tex linjenummer, transportmedel, nästa hållplats) och returnera den som JSON data till en front-end lösning (web, app, ...).

    Hälsningar,
    Bert
    Bert på Trafiklab
  • Ok, tack så jättemycket! Då ska jag nog kunna lösa det.
    Lars Persson
  • Hej! Detta var svårare än jag trodde. Det verkar finnas ett "packet" till Swift som heter Swift-protobuf.

    Hur jag sedan ska gå vidare vet jag inte.

    Det finns inte någon ni vet som har implementerat det i någon iPhone-lösning?

    Skånetrafiken har ju bussar i realtid så de kanske använder era API.
    Dock vill de kanske inte dela information.
    Lars Persson
  • Hej Lars,

    Skånetrafikens busspositioner finns i realtid, tillsammans med information om nyttjandegrad, hur trångt det är ombord på bussen.

    Som jag skrev tidigare så brukar man inte hämta positioner direkt till en mobiltelefon, utan implementerar man en liten serverapplikation som tar hand om realtidsdata och tillgängliggör den i ett format som passar mobilappen, tex som JSON.

    Kvota på nyckeln kommer antagligen inte räcka till för att förse alla användare av en mobilapplikation med realtidspositioner, vilket är en till anledning till att hämta all protobuf data till en server, där man kombinerar realtidsdata och statiskt data, cachar resultatet, och skickar vidare till mobilapplikationen.

    Hälsningar,
    Bert
    Bert på Trafiklab

Kommentera eller skriv ett nytt inlägg

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