Spec-Zone.ru › Ruby 2.6

модуль DRb::DRbProtocol

Module управляющий базовым сетевым протоколом(ами), используемым drb.

По умолчанию, drb использует протокол DRbTCPSocket. Другие протоколы могут быть определены. Протокол должен определить следующие методы класса:

[open(uri, config)] Open a client connection to the server at +uri+,
                    using configuration +config+.  Return a protocol
                    instance for this connection.
[open_server(uri, config)] Open a server listening at +uri+,
                           using configuration +config+.  Return a
                           protocol instance for this listener.
[uri_option(uri, config)] Take a URI, possibly containing an option
                          component (e.g. a trailing '?param=val'),
                          and return a [uri, option] tuple.

Все эти методы должны генерировать ошибку DRbBadScheme, если URI не идентифицирует поддерживаемый ими протокол (например, «druby:» для стандартного протокола Ruby). Таким образом, модуль DRbProtocol, получив URI, определяет, какая реализация протокола обслуживает этот протокол.

Экземпляр протокола, возвращаемый open_server, должен иметь следующие методы:

accept

Принимает новое подключение к серверу. Возвращает экземпляр протокола, способный взаимодействовать с клиентом.

close

Закрывает соединение сервера.

uri

Получает URI для этого сервера.

Экземпляр протокола, возвращаемый open, должен иметь следующие методы:

send_request (ref, msg_id, arg, b)

Отправляет запрос на ref с заданным идентификатором сообщения и аргументами. Это проще всего реализовать, вызвав DRbMessage.send_request, предоставив поток, который находится поверх текущего протокола.

recv_reply

Получает ответ от сервера и возвращает его как пару [успех-булево, значение-ответа]. Это проще всего реализовать, вызвав DRb.recv_reply, предоставив поток, который находится поверх текущего протокола.

alive?

Сохранено ли это соединение?

close

Закрыть это соединение.

Экземпляр протокола, возвращаемый open_server().accept() должен иметь следующие методы:

recv_request

Получает запрос от клиента и возвращает кортеж [объект, сообщение, аргументы, блок]. Это проще всего реализовать, вызвав DRbMessage.recv_request, предоставив поток, который находится поверх текущего протокола.

send_reply(succ, result)

Отправить ответ клиенту. Это проще всего реализовать, вызвав DRbMessage.send_reply, предоставив поток, который находится поверх текущего протокола.

close

Закрыть это соединение.

Новый протокол регистрируется в модуле DRbProtocol с помощью метода add_protocol.

Примеры других протоколов см. в DRbUNIXSocket в drb/unix.rb и HTTP0 в sample/http0.rb и sample/http0serv.rb в полном распределении drb.

Общедоступные методы класса

add_protocol(prot) Показать исходный код
# File lib/drb/drb.rb, line 724
def add_protocol(prot)
  @protocol.push(prot)
end

Добавить новый протокол в модуль DRbProtocol.

open(uri, config, first=true) Показать исходный код
# File lib/drb/drb.rb, line 736
def open(uri, config, first=true)
  @protocol.each do |prot|
    begin
      return prot.open(uri, config)
    rescue DRbBadScheme
    rescue DRbConnError
      raise($!)
    rescue
      raise(DRbConnError, "#{uri} - #{$!.inspect}")
    end
  end
  if first && (config[:auto_load] != false)
    auto_load(uri)
    return open(uri, config, false)
  end
  raise DRbBadURI, 'can\'t parse uri:' + uri
end

Открыть клиентское подключение к uri с конфигурацией config.

Модуль DRbProtocol запрашивает каждый зарегистрированный протокол поочередно, чтобы попытаться открыть URI. Каждый протокол сигнализирует о том, что он не обрабатывает этот URI, сгенерировав ошибку DRbBadScheme. Если ни один протокол не распознает URI, то генерируется ошибка DRbBadURI. Если протокол принимает URI, но при открытии возникает ошибка, генерируется ошибка DRbConnError.

open_server(uri, config, first=true) Показать исходный код
# File lib/drb/drb.rb, line 764
def open_server(uri, config, first=true)
  @protocol.each do |prot|
    begin
      return prot.open_server(uri, config)
    rescue DRbBadScheme
    end
  end
  if first && (config[:auto_load] != false)
    auto_load(uri)
    return open_server(uri, config, false)
  end
  raise DRbBadURI, 'can\'t parse uri:' + uri
end

Открыть сервер, ожидающий подключения на uri с конфигурацией config.

Модуль DRbProtocol поочередно запрашивает каждый зарегистрированный протокол, чтобы попытаться открыть сервер по URI. Каждый протокол сигнализирует о том, что он не обрабатывает этот URI, сгенерировав ошибку DRbBadScheme. Если ни один протокол не распознает URI, то генерируется ошибка DRbBadURI. Если протокол принимает URI, но при открытии возникает ошибка, базовое исключение передается вызывающему коду.

uri_option(uri, config, first=true) Показать исходный код
# File lib/drb/drb.rb, line 785
def uri_option(uri, config, first=true)
  @protocol.each do |prot|
    begin
      uri, opt = prot.uri_option(uri, config)
      # opt = nil if opt == ''
      return uri, opt
    rescue DRbBadScheme
    end
  end
  if first && (config[:auto_load] != false)
    auto_load(uri)
    return uri_option(uri, config, false)
  end
  raise DRbBadURI, 'can\'t parse uri:' + uri
end

Разбор uri в пару [uri, опция].

Модуль DRbProtocol поочередно запрашивает каждый зарегистрированный протокол, чтобы попытаться разобрать URI. Каждый протокол сигнализирует о том, что он не обрабатывает этот URI, сгенерировав ошибку DRbBadScheme. Если ни один протокол не распознает URI, то генерируется ошибка DRbBadURI.

Закрытые методы экземпляра

add_protocol(prot) Показать исходный код
# File lib/drb/drb.rb, line 724
def add_protocol(prot)
  @protocol.push(prot)
end

Добавить новый протокол в модуль DRbProtocol.

open(uri, config, first=true) Показать исходный код
# File lib/drb/drb.rb, line 736
def open(uri, config, first=true)
  @protocol.each do |prot|
    begin
      return prot.open(uri, config)
    rescue DRbBadScheme
    rescue DRbConnError
      raise($!)
    rescue
      raise(DRbConnError, "#{uri} - #{$!.inspect}")
    end
  end
  if first && (config[:auto_load] != false)
    auto_load(uri)
    return open(uri, config, false)
  end
  raise DRbBadURI, 'can\'t parse uri:' + uri
end

Открыть клиентское подключение к uri с конфигурацией config.

Модуль DRbProtocol поочередно запрашивает каждый зарегистрированный протокол, чтобы попытаться открыть URI. Каждый протокол сигнализирует о том, что он не обрабатывает этот URI, сгенерировав ошибку DRbBadScheme. Если ни один протокол не распознает URI, то генерируется ошибка DRbBadURI. Если протокол принимает URI, но при открытии возникает ошибка, генерируется ошибка DRbConnError.

open_server(uri, config, first=true) Показать исходный код
# File lib/drb/drb.rb, line 764
def open_server(uri, config, first=true)
  @protocol.each do |prot|
    begin
      return prot.open_server(uri, config)
    rescue DRbBadScheme
    end
  end
  if first && (config[:auto_load] != false)
    auto_load(uri)
    return open_server(uri, config, false)
  end
  raise DRbBadURI, 'can\'t parse uri:' + uri
end

Открыть сервер, ожидающий подключения на uri с конфигурацией config.

Модуль DRbProtocol поочередно запрашивает каждый зарегистрированный протокол, чтобы попытаться открыть сервер по URI. Каждый протокол сигнализирует о том, что он не обрабатывает этот URI, сгенерировав ошибку DRbBadScheme. Если ни один протокол не распознает URI, то генерируется ошибка DRbBadURI. Если протокол принимает URI, но при открытии возникает ошибка, базовое исключение передается вызывающему коду.

uri_option(uri, config, first=true) Показать исходный код
# File lib/drb/drb.rb, line 785
def uri_option(uri, config, first=true)
  @protocol.each do |prot|
    begin
      uri, opt = prot.uri_option(uri, config)
      # opt = nil if opt == ''
      return uri, opt
    rescue DRbBadScheme
    end
  end
  if first && (config[:auto_load] != false)
    auto_load(uri)
    return uri_option(uri, config, false)
  end
  raise DRbBadURI, 'can\'t parse uri:' + uri
end

Разбор uri в пару [uri, опция].

Модуль DRbProtocol поочередно запрашивает каждый зарегистрированный протокол, чтобы попытаться разобрать URI. Каждый протокол сигнализирует о том, что он не обрабатывает этот URI, сгенерировав ошибку DRbBadScheme. Если ни один протокол не распознает URI, то генерируется ошибка DRbBadURI.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API