Тут можно читать онлайн книгу Фултон Хэл - Программирование на языке Ruby - бесплатно полную версию (целиком). Жанр книги: Программирование. Вы можете прочесть полную версию (весь текст) онлайн без регистрации и смс на сайте Lib-King.Ru (Либ-Кинг) или прочитать краткое содержание, аннотацию (предисловие), описание и ознакомиться с отзывами (комментариями) о произведении.
Программирование на языке Ruby - описание и краткое содержание, автор Фултон Хэл, читать бесплатно онлайн на сайте электронной библиотеки Lib-King.Ru.
Ruby — относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов. Книга является полноценным руководством по Ruby — ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии. Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.
Программирование на языке Ruby - читать книгу онлайн бесплатно, автор Фултон Хэл
ts.write [:Add, 5, 9] # Хранить "вечно".ts.write [:Foo, "Bar"], 10 # Хранить 10 секунд.Здесь уместно будет сказать несколько слов о синхронизации. Предположим, что два клиента пытаются одновременно забрать (
takewritetakewriteМетод
notifyNotifyTemplateEntry•
write•
take• удаление (когда истекает срок хранения кортежа);
• закрытие (когда истекает срок хранения объекта
NotifyTemplateEntryПоскольку операция чтения ничего не изменяет, то система не поддерживает уведомлений о чтениях. В листинге 20.4 приведен пример использования notify.
require 'rinda/tuplespace'ts = Rinda::TupleSpace.newalberts = ts.notify "write", ["Albert", nil]martins = ts.notify "take", ["Martin", nil]thr1 = Thread.new do alberts.each {|op,t| puts "#{op}: #{t.join(' ')}" }endthr2 = Thread.new do martins.each {|op,t| puts "#{op}: #{t.join(' ')}" }endsleep 1ts.write ["Martin", "Luther"]ts.write ["Albert", "Einstein"]ts.write ["Martin", "Fowler"]ts.write ["Alberf, "Schweitzer"]ts.write ["Martin", "Scorsese"]ts.take ["Martin", "Luther"]# Выводится:# write: Albert Einstein# write: Albert Schweitzer# take: Martin LutherМы видели, что
readniltem1 = ["X", Integer] # Соответствует ["X",5], но не ["X","Files"].tem2 = ["X", NilClass] # Соответствует литералу nil в кортеже.Кроме того, разрешается определять собственный оператор ветвящегося равенства (
======Время жизни кортежа можно задать в момент записи. В сочетании с величинами тайм-аутов для различных операций над кортежами это позволяет ограничить время выполнения простых и более сложных манипуляций.
Тот факт, что у кортежа может быть конечный срок хранения, заодно означает, что по истечении этого срока кортеж можно обновить с помощью специально написанного объекта. В библиотеке имеется готовый класс
SimpleRenewerВ листинге 20.5 приведен еще один пример работы с пространством кортежей. Он решает ту же задачу о производителе и потребителе, которая была рассмотрена в главе 13.
require 'rinda/tuplespace'ts = Rinda::TupleSpace.newproducer = Thread.new do item = 0 loop do sleep rand(0) puts "Производитель произвел ##{item}" ts.write ["Item",item] item += 1 endendconsumer = Thread.new do loop do sleep rand(0) tuple = ts.take ["Item", nil] word, item = tuple puts "Потребитель потребил ##{item}" endendsleep 60 # Работать одну минуту, потом завершиться и завершить потоки.20.4. Обнаружение сервисов в распределенном Ruby
Методика обнаружения сервисов может оказаться полезной, когда имеется много локально работающих сервисов, поскольку дает возможность находить сервис по имени. Если же число сервисов невелико и их местонахождение точно известно, особого смысла в автоматическом обнаружении нет.
Раз уж вы продолжили чтение, то, наверное, хотите знать, как работает механизм обнаружения сервисов. Такую возможность предоставляет библиотека
Rinda::Ringdrbdrb