Nee, er is geen whitepaper en het is net 200 regels code, dus niet zo veel om te slikken.
In SignalR gaat elk bericht door een ding dat een berichtenbus wordt genoemd. Wanneer u wilt uitschalen over knooppunten (of processen of app-domeinen), moet de implementatie van deze bus kunnen communiceren met elk exemplaar van uw toepassing. Hiervoor kunt u de RedisMessageBus gebruiken. Redis heeft een pub-submechanisme en de mogelijkheid om sleutelwaardeparen op te slaan en we gebruiken het eerste alleen voor SignalR.
OffTopic:Dit is HEEL belangrijk! SignalR is GEEN betrouwbare berichtgeving, het is een verbindingsabstractie. We kunnen berichten bufferen voor longpolling, maar u **kan* er niet op vertrouwen dat de berichten er voor altijd zijn. Als je belangrijke berichten hebt die je moet volhouden, bewaar ze dan.
Elke webserver maakt verbinding met een (of meer in de nieuwe implementatie) redis-gebeurtenissen om berichten tussen hen te verzenden. Wanneer een bericht binnenkomt voor een of meer clients, wordt het naar de backplane (redis) gestuurd en komt het op alle webservers aan. Elke webserver krijgt het bericht van redis en slaat het op in een lokale cache. Deze lokale cache is waar SignalR-clients (browsers, enz.) Worden bediend.
Een belangrijk onderdeel van het uitschaalontwerp zijn cursors. Een cursor geeft aan waar een bepaalde client zich in een oneindige stroom berichten bevindt. Wanneer clients opnieuw verbinding maken na het verbreken van een verbinding of een longpolling-verbinding terugkomt na het ontvangen van een bericht, vraagt het de bus om me alles te bezorgen sinds een of andere cursorwaarde. Cursors worden gedefinieerd door de implementatie van de berichtenbus en we hebben dit genormaliseerd in de nieuwste bronnen (nog niet vrijgegeven op het moment van schrijven, maar ik zal hier niet in details treden). De cursor in de huidige implementatie van redis is slechts een getal dat wordt verhoogd, niets te ingewikkeld.
Hopelijk geeft dat een idee van hoe het werkt.