Rails ve EventMachine'ı birlikte kullanıyoruz ve bu combo'yu Yolcu ile birlikte kullanırken yapılması gereken çok özel bir kurulum var. Çok fazla deneme ve hatadan sonra, EventMachine başlatma işlemi iyi çalışıyor, ancak kodu biraz daha iyi anlamak istiyorum. Bu kod snippet'inde görebileceğiniz gibi, başlatıcımız Yolcuyu denetler ve sonra EventMachine'i yeniden başlatmadan önce çatallı bir işlem olup olmadığını kontrol eder.EventMachine and Ruby Threads - gerçekten burada neler oluyor?
if defined?(PhusionPassenger)
PhusionPassenger.on_event(:starting_worker_process) do |forked|
# for passenger, we need to avoid orphaned threads
if forked && EM.reactor_running?
EM.stop
end
Thread.new {
EM.run do
Soruma EM.reactor_running ile ilgili mi? ve EM.stop komutları. Yolcu bizim sürecimizi zorladıysa, neden EM referansını yeni bir konuya yeniden başlatmam gerekiyor? EM.reactor_running ise? doğru döndürür, EM örneğini başvuruyor muyum?
Burada blogumuzda tüm http://www.hiringthing.com/2011/11/04/eventmachine-with-rails.html
Harika bir açıklama teşekkürler. Kendi ipliğindeki EM'i çalıştırmaya ihtiyaç duyduğumdan eminim, ama "EM döngüsü bırakılabilir" dediğinizde, burası biraz belirsiz olduğum yer. Bir EM döngüsü "sola" nasıl alınır? Ebeveyn sürecini kapatmıyorum 'EM, doğru mu? – Joshua
Tam olarak yaptığınız şey bu. Ebeveyn işleminden potansiyel olarak EM'den ayrılıyorsunuz. Bir EM döngüsünün ana işlemde çalıştırılması gerekirse, bu da çatal atılacaktır, ancak genellikle ebeveynden kalan dosya tanıtıcıları ile ilgilenmiyorsunuz, bu yüzden sıfırdan başlıyorsunuz. Yolcu'nun bir EM döngüsünü kendi başına yürütme olasılığı düşük olduğu göz önünde bulundurulduğunda, bu her şeyden çok bir güvenlik önlemidir. – roidrage
Benzer şekilde, ben ince altında çalışan bir websocket uygulaması içinde, ruby-amqp gem yoluyla RabbitMQ ile çalışıyorum. Thin'in kendi EventMachine döngüsüne sahip olması ve şu anda EventMachine.next_tick'i kullanıp amqp ürünlerimi kullanıyorum. Bu doğru mu yoksa AMQP kullanmak için kendi EM kullanmak için EventMachine.fork_reactor kullanmalı mıyım? – wchrisjohnson