Sockets i Silverlight
Posted in Silverlight on mars 1st, 2009 by erik – Be the first to commentSockets är till skillnad från WCF Duplex Polling ingen nymodighet utan har funnits sedan början av 70-talet då det amerikanska försvaret satsade resurser på att bygga vad som skulle bli framtidens nätverk och Internet. Wikipedia definierar det lite knepigt, men här är min tolkning av deras tolkning:
En socket är en grunka som kombinerar en lokal IP adress och ett portnummer till en användbar enhet som man kan använda i ett program, mycket liknande en ända av en telefonanslutning, som fungerar som en brygga mellan ett telefonnummer och personen som har telefonnumret.
Man upprättar alltså en anslutning genom att använda sig av sitt programmeringsspråks implementation av sockets och kan skicka data fram och tillbaka mellan två sockets (som kan finnas på två olika datorer) så länge anslutningen är öppen. Det här gör att ena sidan inte behöver “fråga” den andra sidan om något nytt har hänt, utan informationen pushas fram och tillbaka.
Det finns ett par olika typer av sockets, beroende på vilket protokoll man använder sig av. UDP använder man när man har en anslutning som liknas vid en ström som flödar, och det är inte jätteviktigt om allt som skickas kommer fram - t ex ip-telefoni, strömmande video eller snabba nätverksspel. TCP gäller när man vill upprätta en helt tillförlitlig anslutning - vilket innebär att alla paket som skickas från ena ändan kommer att komma fram. Försvinner något paket på vägen så skickas det automatiskt igen.
När det gäller Silverlight och sockets är valet inte speciellt svårt, eftersom det i nuläget endast är TCP-sockets som är möjliga att använda sig av.
I Silverlight 2 Beta 1 fanns det en begränsning i att socketanslutningen mellan en klient och en server måste ske på samma maskin - alltså att hemsidan som silverlight-klienten finns på behöver vara på samma server som applikationen den ansluter sig mot. Nu i den skarpa versionen är det dock möjligt att ansluta till en socket-server på annat håll, men socket-servern måste tillhandahålla ett policydokument på en annan port innan anslutningen kan upprättas.
Det är inte så krångligt som det låter och allt finns utförligt förklarat på MSDN och med fungerande exempel på en policy-server hos Dan Wahlin.
Ett riktigt saftigt exempel på en socketimplementation för Silverlight finns i en artikel i MSDN magazine. Vill man bara ha en enkel översikt är dock Dan Wahlins basketexempel, som jag pekade på i föregående inlägg, att föredra. Då var det Duplex Polling, men samma funktionalitet finns även implementerad med sockets:
Snart börjar det förresten bli läge att visa lite från mitt snabbschacksprojekt, eftersom jag har ryggraden i princip färdig för en socketserver, som blir den teknik jag till slut valt att använda.