繁体   English   中英

在Scala中创建多个演员

[英]Creating multiple actors in scala

我是scala的新手,我正尝试在scala中编写一个程序,该程序可以创建多个(例如30个)actor,并在它们之间传递消息。

以下是我到目前为止所管理的:

 import scala.actors.Actor
 import scala.util.Random

    class MyActor(val id:Int, val N:Int) extends Actor {
        def act() {
            println ("Starting actor: " + id)    

            /**
                 react{

                        case str : String =>
                              println("Received Msg: " + str)

                              val randNo : Int = Random.nextInt(N)
                              println("Actor " + id + " Picking a random actor: " + randNo) 

            // Here, I should forward the message received to the ALREADY created and started actors    
                             // val objActor = new MyActor(randNo : Int, N : Int)
                             // objActor.start
                             // objActor ! str
                        }
            */
        }
    }

    object Main {

    def main(args:Array[String]) {

        if(args.length == 0)
        {
            println("Usage scala Main <numNodes>")
            sys.exit()
        }

        val N : Int = (args(0)).toInt

        // Starting all actors

         for (i: Int <- 0 to N-1) {
                val a = new MyActor(i : Int, N : Int)
                println ("About to start actor " + a.id)
                a.start 
         //   a!"Broadcast this msg to all actors"
         } 
      }
    }

该程序的目标是创建多个演员,并将字符串从一个演员转发到另一个。

上面的代码创建了“ N”个参与者,作为命令行参数。 这些参与者由对象Main创建和启动。 Main应该只向上述创建的参与者之一发送消息。 从主体接收消息的演员应该将同一消息转发给另一个已创建/启动的演员。

这可能吗? 如果是这样,请您指导我正确的方向吗?

预先感谢,MS

首先,我建议您检查Akka演员,并尽快替换Scala 2.10中的Scala演员,该版本有望在未来几个月内问世。

话虽这么说,工作流肯定有可能会这样(至少在Akka中):

  1. 在您的main方法中创建一个ActorSystem
  2. 产卵Actor作为内的期望ActorSystem经由actorOf方法,该方法将返回一个ActorRef对象。
  3. 选择这些ActorRef之一来发送消息。

Actor实现中,以某种方式使Actor了解其他对象(也许通过构造函数),并弄清楚您是如何在整个系统中传播String的(在此说明中,我通常更喜欢使用Scala case类作为消息)。

这种声音听起来像是系统的状态机-我一直在ActorSystem一个想法是将ActorSystem视为图形实体,这意味着对于每个Actor实例,您ActorSystem为其传递其邻居列表(也许作为Vector[ActorRef] )。

您还可以查看Akka团队最近推出的新Actor DSL

要了解有关Akka的更多信息,我推荐以下资源:

  1. 乔纳斯·博内尔(JonasBonér)在纽约Scala的最近演讲中介绍了Akka
  2. Akka in Action (MEAP)

我找到了一种方法,可以通过使用一系列参与者在scala中解决上述问题。 由于所有参与者都将执行相同的操作(即,转发消息),因此足以创建MyActor的多个实例。 非常感谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM