Nej, der er ingen hvidbog, og det er ligesom 200 linjer kode, så det er ikke så meget at sluge.
I SignalR går hver besked gennem en ting, der kaldes en beskedbus. Når du vil skalere ud på tværs af noder (eller processer eller app-domæner), skal implementeringen af denne bus være i stand til at tale med hver instans af din applikation. For at gøre dette kan du bruge RedisMessageBus. Redis har en pub-undermekanisme såvel som dens evne til at gemme nøgleværdipar, og vi bruger kun førstnævnte til SignalR.
OffTopic:Dette er MEGET vigtigt! SignalR er IKKE pålidelig meddelelse, det er en forbindelsesabstraktion. Vi kan muligvis buffere beskeder til longpolling, men du **kan ikke* stole på, at beskederne er der for evigt. Hvis du har vigtige meddelelser, du skal fortsætte med, så bevar dem.
Hver webserver opretter forbindelse til en (eller flere i den nye implementering) redis-begivenheder for at sende meddelelser mellem dem. Når en besked kommer ind til en eller flere klienter, sendes den til backplane (redis), og den ankommer på alle webservere. Hver webserver får beskeden fra redis og gemmer den i en lokal cache. Denne lokale cache er stedet, hvor SignalR-klienter (browsere osv.) serveres.
En vigtig del af udskaleringsdesignet er markører. En markør repræsenterer, hvor en bestemt klient er i en uendelig strøm af meddelelser. Når klienter genopretter forbindelsen efter at have mistet en forbindelse, eller en longpolling-forbindelse kommer tilbage efter at have modtaget en besked, beder den bussen om at hente mig alt siden en eller anden markørværdi. Markører er defineret af meddelelsesbus-implementeringen, og vi har normaliseret dette i de seneste kilder (endnu ikke udgivet i skrivende stund, men jeg vil ikke gå i detaljer her). Markøren i den aktuelle implementering af redis er kun et tal, der er øget, intet for kompliceret.
Forhåbentlig giver det en idé om, hvordan det virker.