Witam.
Robię przykład z książki i nie wiem czemu nie działa:
Uruchamiam serwer nasłuchujący na porcie tak jak pokazano w literaturze:
[code]require ‘rinda/tuplespace’
ts=Rinda::TupleSpace.new
DRb.start_service(‘druby://localhost:1234’, ts)
gets[/code]
A potem uruchamiam klienta 2-wątkowego. Coś ta krotka nie chce działać.
O CO CHODZI?
Myslalem ze linux jest walniety, zainstalowalem pod windowsem i to samo.
Efekt - nic się nie wyświetla
[code]require ‘rinda/tuplespace’
DRb.start_service
ts=DRbObject.new(nil,‘druby://localhost:1234’)
producer = Thread.new do
item=0
loop do
sleep.rand(0)
puts “Wysylka #{item}”
ts.write[“Item”,item]
item += 1
end
end
consumer = Thread.new do
loop do
sleep rand(0)
tuple= ts.take[“Item”,item]
word,item = tuple
puts “Odbior #{item}”
end
end
sleep 60[/code]
Jakoś nie widzę w tym drugim kodzie Rindy tylko DRbObject… a to nie to samo przecież.
No nie do końca chyba. Po pierwsze, to jest z książki. Dokładnie dzisiaj jeszcze poczytałem. I poszukałem w necie. Niżej linki.
A po drugie to jest logiczne: bo uruchamiasz usługę DRb, podajesz do niej adres IP+port i dodajesz obiekt - właśnie przestrzeń krotek (w moim przykładzie dodaję jako drugi argument-obiekt ts=Rinda::TupleSpace.new)
A klient używa DRbObject.new po to, żeby tę krotkę z tego rejestru doczytać.
Zatem u klienta nie musi być widoczne Tuple.Space.
Tutaj masz linka, gdzie jest analogicznie pokazane już na samym początku. Dalsza część przykładu opiera się o RingServer, ale początek jest analogiczny jak mój:
http://www.datanoise.com/articles/2006/8/24/what-is-rinda-anyway
A tutaj cytat:
"When it is started, it will print URI that a client script can use to find our TupleSpace. Below is the code that a client script should use to find our TupleSpace:
[quote]require “rinda/rinda”
URI = "..." # our TupleSpace URI
include Rinda
DRb.start_service
ts = DRbObject.new(nil, URI)[/quote]
To chyba jakiś bug w rubym czy co?