Rinda (Ruby programmeringsspråk)
Rinda är ett mjukvarubibliotek för att skapa modulära och distribuerade samarbetstjänster i Ruby med hjälp av tupelutrymmet eller Lindas distribuerade datorparadigm .
Baserat på en källkod som ursprungligen släpptes till Ruby-gemenskapen av Masatoshi SEKI 2000, absorberades Rinda senare i Rubys kärndistribuerade Ruby- modul (DRb). Rinda har distribuerats som en del av kärnbiblioteket i Ruby sedan Ruby 1.8.
Exempel användning
Rinda tillhandahåller ett ramverk genom vilket flera Ruby-processer (som eller kanske inte körs på samma maskin) kan lägga till, komma åt och ändra tuples (en ordnad lista med element) lagrade i ett delat datalager (tuplespacet).
Till exempel skapar följande program ett nytt Rinda tuplespace och initierar en DRb-tjänst som väntar på förfrågningar som kommer över nätverket.
kräver 'rinda/tuplespace' URI = "druby://localhost:61676" DRb . start_service ( URI , Rinda :: TupleSpace . ny ) DRb . tråd . Ansluta sig
Med Rinda kan andra applikationer polla tupelutrymmet för tupler som matchar specifika kriterier.
Till exempel ansluter programmet nedan till en Rinda-tjänst och lyssnar efter vilken tuppel som helst som består av en aritmetisk operator följt två siffror (som sekvensen "+ 2 4") När en sådan tuppel upptäcks beräknar programmet resultatet av den matematiska operationen ( till exempel bearbetar "+ 2 4" till "6") och lagrar det i tuplespace.
kräver 'rinda/rinda' URI = "druby://localhost:61676" DRb . start_service ts = Rinda :: TupleSpaceProxy . new ( DRbObject . new ( noll , URI )) loop do ops , a , b = ts . ta ( [ %r{^[-+/*]$} , Numerisk , Numerisk ] ) ts . skriv ( [ "resultat" , a . skicka ( ops , b ) ] ) slut
Slutligen kan Rinda-applikationer lägga till eller ta bort tuples från tuplespace.
Till exempel postar följande program prefix aritmetiska tupler till tuppelutrymmet och läser tillbaka resultatet (upplagt av programmet ovan).
0
kräver 'rinda/rinda' URI = "druby://localhost:61676" DRb . start_service ts = Rinda :: TupleSpaceProxy . nya ( DRbObject . new ( noll , URI )) tupler = [[ "*" , 2 , 2 ] , [ "+" , 2 , 5 ] , [ "-" , 9 , 3 ]] tupler . varje gör | t | ts . skriv ( t ) res = ts . take ( [ "resultat" , noll ] ) sätter " #{ res [ 1 ] } = #{ t [ 1 ] } #{ t [ ] } #{ t [ 2 ] } " slut
externa länkar