次の方法で共有


Vad är FeedSync?

feedsynclogo feedsync

Microsofts chefsarkitekt Ray Ozzie har sedan 2005 lett utvecklingen av en ny teknik för att hantera synkronisering av data mellan olika enheter (stationära, handhållna, mobila, servrar etc.), en teknik som bygger på och utökar RSS- och Atom-protokollen. Ursprungligen kallades tekniken för Simple Sharing Extensions men döptes om till FeedSync för att bättre illustrera att det är just synkronisering av Feeds som det handlar om.

Med hjälp av FeedSync kan du synkronisera Feeds från flera olika 'endpoints', t.ex. två olika servrar som publicerar data i en gemensam Feed, utan att någon av dessa endpoints enskilt behöver agera 'master' och ansvarara för en enda "sanning" som bestämmer vad denna Feed för tillfället innehåller.

Så här kan en RSS Feed se ut som har utökats med FeedSync - notera användandet av FeedSync namespace med sx: prefixet:

<?xml version="1.0" ?>

<rss version="2.0" xmlns:sx="https://feedsync.org/2007/feedsync">

<channel>

<title>todolist.xml</title>

<description>Sample to do list</description>

<link>https://www.example.com/index.html</link>

<item>

<sx:sync id="ep1.100" updates="1" deleted="false" noconflicts="false">

<sx:history sequence="1" when="20071129T06:27:12Z" by="EP1" />

</sx:sync>

<title>Get car serviced</title>

<description>Needs oil change</description>

</item>

<item>

<sx:sync id="ep1.101" updates="4" deleted="false" noconflicts="false">

<sx:history sequence="4" when="20071129T06:27:15Z" by="EP2" />

<sx:history sequence="3" when="20071129T06:27:13Z" by="EP2" />

<sx:history sequence="2" when="20071129T06:27:13Z" by="EP1" />

<sx:history sequence="1" when="20071129T06:27:11Z" by="EP1" />

<sx:conflicts>

<item>

<sx:sync id="ep1.101" updates="4" deleted="false" noconflicts="false">

<sx:history sequence="4" when="20071129T06:27:13Z" by="EP1" />

<sx:history sequence="3" when="20071129T06:27:13Z" by="EP2" />

<sx:history sequence="2" when="20071129T06:27:13Z" by="EP1" />

<sx:history sequence="1" when="20071129T06:27:11Z" by="EP1" />

</sx:sync>

<title>Buy Groceries</title>

<description>Get milk, eggs, butter and rolls</description>

</item>

</sx:conflicts>

</sx:sync>

<title>Buy Groceries  DONE</title>

<description>Get milk, eggs, butter and bread</description>

</item>

</channel>

</rss>

 

Varje item i en RSS-feed ges ett sx:sync-element som innehåller information om uppdateringshistoriken samt eventuella konflikter. Konflikter uppstår i det fall flera parter eller endpoints som medverkar i synkroniseringen uppdaterar samma post. I den andra posten i exemplet - den med id "ep1.101" - finns det alltså en konflikt eftersom en uppdatering skett av både EP1 och EP2. Eftersom EP2 gjort den senaste uppdateringen kan denna konflikt lösas av logik som implementeras i tjänsten för att undersöka conflicts-elementet. En komplett genomgång av ett exempel med tillhörande källkod för både RSS och Atom finns tillgänglig här.

FeedSync säger alltså inget om den exakta implementationen utan tillhandahåller bara syntaxen för hur Feeds beskrivs samt vilken logik som ska gälla för att hantera synkronisering, upplösning av konflikter, hur publicerande endpoints respektive prenumererande endpoints ska bete sig osv. En mycket intressant "real life" implementation av FeedSync är Live Mesh - som alltså är en komplett plattform för synkronisering av olika enheter, som kan dela data antingen direkt med varandra (Peer-to-Peer) eller genom "moln"-tjänstens lagringsyta.

Men hur förhåller sig FeedSync till Microsoft Sync Framework?

Microsoft Sync Framework består av ett antal färdiga komponenter, tjänster och hjälpklasser vilka tillsammans utgör ett ramverk för att snabbt kunna bygga applikationer som kan synkronisera mellan t.ex. offline och online-lägen. Eftersom ramverket innehåller tjänsten 'Sync Services for FeedSync' går det alldeles utmärkt att bygga sina applikationer med FeedSync-utökade feeds som datakälla. Microsoft Sync Framework tillhandahåller även färdiga tjänster för synkronisering mot filsystem och ADO.NET. Genom dess 'Core'-bibliotek kan ramverket även utökas till att synkronisera mot vilken typ av datakälla som helst.

Hela specifikationen för FeedSync (som faktiskt är barmhärtigt kortfattad :-) finns att läsa här.

Comments