... > Ruby > Асинхронное Программирование с...

Асинхронное Программирование с EventMachine в Ruby

НАВИГАЦИЯ ПО СТРАНИЦЕ

Установка EventMachine Асинхронные Задачи и Таймеры Обработка Ошибок и Исключений

EventMachine — это библиотека для асинхронного программирования в Ruby. Она предоставляет мощные инструменты для разработки сетевых приложений и серверов, работающих эффективно и масштабируемо. Давайте рассмотрим основы использования EventMachine для асинхронного программирования.

Установка EventMachine

Установите EventMachine с помощью RubyGems:

gem install eventmachine

Пример Простого Сервера

Создайте файл simple_server.rb с следующим содержанием:

require 'eventmachine'

module SimpleServer
  def post_init
    puts 'Подключение установлено'
  end

  def receive_data(data)
    puts "Получено: #{data}"
    send_data "Получено: #{data}"
  end

  def unbind
    puts 'Подключение разорвано'
  end
end

EventMachine.run do
  EventMachine.start_server '127.0.0.1', 8080, SimpleServer
  puts 'Сервер слушает порт 8080'
end

Этот простой сервер использует EventMachine для обработки подключений, приема данных и отправки ответов.

Запуск Сервера

Запустите сервер с помощью команды:

ruby simple_server.rb

Сервер будет слушать порт 8080.

Пример Клиента

Создайте файл simple_client.rb с содержанием:

require 'eventmachine'

module SimpleClient
  def post_init
    send_data 'Привет, сервер!'
  end

  def receive_data(data)
    puts "Ответ от сервера: #{data}"
    close_connection
  end
end

EventMachine.run do
  EventMachine.connect '127.0.0.1', 8080, SimpleClient
end

Этот простой клиент подключается к серверу и отправляет сообщение.

Запуск Клиента

Запустите клиента с помощью команды:

ruby simple_client.rb

Асинхронные Задачи и Таймеры

EventMachine позволяет выполнять асинхронные задачи и использовать таймеры для отложенного выполнения кода. Пример:

require 'eventmachine'

EventMachine.run do
  EventMachine.add_timer(5) do
    puts 'Прошло 5 секунд'
    EventMachine.stop
  end

  EventMachine.defer do
    # Асинхронная задача
    result = some_long_running_operation
    puts "Результат: #{result}"
  end
end

Обработка Ошибок и Исключений

EventMachine предоставляет механизм для обработки ошибок и исключений в асинхронном коде. Пример:

require 'eventmachine'

module ErrorHandler
  def self.handle_error(e)
    puts "Произошла ошибка: #{e.message}"
    EventMachine.stop
  end
end

EventMachine.error_handler(&ErrorHandler.method(:handle_error))

EventMachine.run do
  # Ваш асинхронный код
end

EventMachine в Ruby предоставляет мощные возможности для асинхронного программирования, что делает его подходящим для разработки сетевых приложений и серверов, обеспечивая высокую производительность и отзывчивость.