2012-08-05 15 views
16

Akka'yı öğreniyorum ve aktörlerin birbirleriyle nasıl konuştuklarını anlamaya çalışıyorum (bunlara A ve B deyin). Bir istek/yanıt senaryosu değil, A ve B birbirlerinin mesajlarını istedikleri zaman gönderiyor.Akka aktorFor vs bir ActorRef'i geçerek

Şu anda her iki yöne de mesaj ileten iki tane kardeşim var. Her ikisi de doğrudan ActorSystem'da oluşturulur. Başlangıçta,A'u B yapıcısına geçirdim. Ancak A yapıcısının ActorRefA yapıcısına geçemiyorum çünkü henüz mevcut değil, yani bu yöntemi dairesel referanslar için kullanamıyorum.

actorFor hakkında okudum ve bu yolunu kullanarak bir oyuncuya bakmama izin verir. Ancak, bu kurulumda rahat değilim, çünkü yol değişirse, derleyici tarafından yakalanmayacaktır. o ebeveyne A ve B gelen mesajları geçmektir, ebeveyn var ve sonra üst sırt aşağı A ve B haber ulaştıracak etmiş

diğer alternatif, her aktör dikkate erişimi vardır. Ancak bu, ebeveynleri mesaj tiplerine geri ve ileri aktarır.

Stratejiler, aktörlerin birbirlerini tanımalarını sağlamak için ne gibi stratejilerdir? Aktörleri yoldan aramak konusunda çok temkinli davranıyor muyum? Benim düşünceme göre

+0

'ActorRef'inizi başlatırken 'tembel val' kullanmayı denediniz mi? Bunun, döngüsel bağımlılığın çözümüne yardımcı olacağını hayal edebiliyorum. Tabii ki Scala'yı kullandığını farz edelim ... – agilesteel

+0

Sadece bir şey verdim ve işe yarıyor. Tanımlanmadan önce tembel bir değere başvurduğunu bilmiyordum - çılgın şeyler! Bahşiş için teşekkürler. İnsanların ActorRefs ve yolları arasındaki geçiş hakkında neler hissettiklerini bilmek istiyorum. – Geoff

+0

http://doc.akka.io/docs/akka/2.0.2/general/addressing.html dosyasını okuduğunuzdan emin olun. – sourcedelica

cevap

11

Eğer

Strateji 1 (Üzgünüm, ama aynı zamanda benim en kötü desen için) senin sorununa yakın mesafede listelemek üç stratejileri vardır: Eğer aktör A ve aktör B oluşturmak, actorRef A'yı oyuncu B'nin kurucusuna geçirme. Ping pong'unuz A oyuncudan A mesajına mesaj göndererek başlar ve A aktörü gönderen referansını kullanarak cevap verebilir. (Etrafında veya başka bir şekilde)


Strateji 2: o sorgularken, hem de aktör yaratılması kısmındaki adı atar: Eğer adlandırma ilgilenir uygulamanızda bir katman oluşturun. Bu problemi tek bir noktada merkezileştirir.


Strateji 3: pinpon oynayan iki kardeş aktörler her aktör ebeveyn ve çocukları ile sadece iletişim ve kardeşleri hakkında hiçbir bilgiye sahip temelde daha iyi, daha modüler aktör hiyerarşisi takmayacaksanız merak ediyorsunuz.

+3

Strateji 3 en mantıklı geliyor. Ebeveynlerin çok fazla kablolama yapmak zorunda kalacağından biraz endişeliydim, ama sanırım sorun değil, çünkü ebeveynlerin çocuklarını koordine etme görevi (sadece mesajların iletilmesi pek işe yaramıyor). – Geoff