EventMachine Ruby için olay-güdümlü G/Ç ve hafif koşut zamanlı (concurrency) kütüphanesidir. JBoss Netty, Apache MINA, Python's Twisted, Node.js, libevent ve libev kitaplıkları gibi Reaktör desenini kullanarak olay-güdümlü G/Ç'a imkan verir.
EventMachine iki anahtar gereksinimi karşılamak için tasarlanmıştır:
-
Çoğu son kullanıcı ürünlerin gerektirdiği oldukça yüksek ölçeklenebilirlik, performans ve kararlılık
-
Yüksek performanslı zincirlenmiş (threaded) ağ programlamanın karmaşıklığını gizleyecek API, mühendislerin uygulamanın kendisine odaklanmalarını sağlar.
Bu eşsiz birleşim, Web sunucuları ve vekilleri (proxies), eposta ve IM son kullanıcı sistemleri, doğrulama/yetkilendirme süreçleri ve burada sayamayacağımız kadar çok kritik ağ uygulamalarının tasarımında EventMachine'i ana seçenek yapar.
EventMachine 2000'lerden bu yana aramızdadır, oturmuş ve ciddi-testlerden geçmiş bir kitaplıktır.
- Ölçeklenebilir olay-güdümlü sunucular. Örneğin Thin veya Goliath.
- Farklı protokoller, RESTful API'ler vb için ölçeklenebilir asenkron istemciler. Örneğin: em-http-request veya amqp gem.
- Özelleştirilmiş etkili ağ vekilleri. Örneğin: Proxymachine.
- Dosya ve ağ izleme araçları. Örneğin: eventmachine-tail ve logstash.
EventMachine, Ruby 1.8.7-2.3, REE, JRuby'i destekler Unix ailesinden çoğu işletim sisteminin (Linux, Mac OS X, BSD) yanı sıra Windows'da bile iyi çalışır.
RubyGems ile kurabiliriz
gem install eventmachine
veya Bundler kullanıyorsanız Gemfile
'a ekleyebiliriz:
gem "eventmachine"
EventMachine ile tanışmak için aşağıdaki kaynaklara bakabilirsiniz:
- Ilya Grigorik'in EventMachine hakkında ki blog girdisi.
- Dan Sinclair tarafından hazırlanmış EventMachine'a Giriş.
EventMachine ile yazılmış tam donanımlı yankı (echo) sunucu:
require 'eventmachine'
module EchoServer
def post_init
puts "-- birisi yankı sunucuya bağlandı!"
end
def receive_data data
send_data ">>>Gönderiniz: #{data}"
close_connection if data =~ /quit/i
end
def unbind
puts "-- birisi yankı sunucudan ayrıldı!"
end
end
# Bunun şu an ki iş sürecini (thread) bloke edecek.
EventMachine.run {
EventMachine.start_server "127.0.0.1", 8081, EchoServer
}
Şimdilik referans rehberine ve wiki'ye sahibiz.
- Posta listesine (Google Group) katıl
- irc.freenode.net de ki IRC kanalına #eventmachine katıl.
EventMachine ya GPL ya da Ruby Lisansının taşıdığı ücretsiz yazılım telif hakkına sahiptir.
Telif: Francis Cianfrocca (C) 2006-07. Tüm hakları saklıdır.
Ruby kullanıcısıysanız ve EventMachine sizi mutlu edemediyse, Celluloid ilginizi çekebilir.