Den næste udgivelse af ErgoFramework 2.2 fandt sted, og implementerede den komplette Erlang-netværksstack og dets OTP-bibliotek i Go-sproget. Rammerne giver udvikleren fleksible værktøjer fra Erlangs verden til at skabe distribuerede løsninger i Go-sproget ved hjælp af færdige, generelle designmønstre gen.Application, gen.Supervisor og gen.Server, samt specialiserede - gen. Stage (distribueret pub/sub), gen. Saga (distribuerede transaktioner, en implementering af SAGA-designmønsteret) og gen.Raft (en implementering af Raft-protokollen).
Derudover giver frameworket proxy-funktionalitet med end-to-end-kryptering, som ikke er tilgængelig i Erlang/OTP og Elixir. Da Go-sproget ikke har en direkte analog til Erlang-processen, bruger frameworket goroutiner som grundlag for gen.Server med en "recover"-indpakning til at håndtere undtagelsessituationer. Projektkoden distribueres under MIT-licensen.
Netværksstakken i ErgoFramework implementerer fuldt ud DIST-specifikationen for Erlang-protokollen. Det betyder, at applikationer skrevet på basis af ErgoFramework fungerer indbygget med alle applikationer skrevet i programmeringssprogene Erlang eller Elixir (et eksempel på interaktion med en Erlang-node). Det er også værd at bemærke, at gen.Stage-designmønsteret er implementeret i henhold til Elixir GenStage-specifikationen og er fuldt kompatibelt med det (implementeringseksempel).
I den nye udgivelse:
- Nye skabeloner tilføjet
- gen.Web er et Web API Gateway (også kendt som Backend For Frontend) designmønster. Eksempel.
- gen.TCP er en skabelon, der giver dig mulighed for at implementere en pulje af TCP-forbindelsesacceptorer med minimal indsats i at skrive kode. Eksempel.
- gen.UDP - svarende til gen.TCP-skabelonen, kun for UDP-protokollen. Eksempel.
- En ny begivenhedsfunktionalitet er blevet foreslået med implementering af en simpel begivenhedsbus inde i en node, som giver dig mulighed for at skabe mekanismer til udveksling af begivenheder (pub/under) mellem lokale processer. Eksempel.
- Tilføjet understøttelse af typeregistrering, som tillader automatisk serialisering/deserialisering af meddelelser til en indbygget Golang-datatype. Det betyder, at du ikke længere behøver at bruge etf.TermIntoStruct for hver modtaget besked. Registrerede typer vil automatisk blive transformeret til den specificerede type, hvilket markant fremskynder ydelsen af meddelelsesudveksling mellem distribuerede noder.
Kilde: opennet.ru