首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Akka远程演员不能在游戏之间进行交流!应用程序

Akka远程演员不能在游戏之间进行交流!应用程序
EN

Stack Overflow用户
提问于 2013-02-06 22:32:41
回答 1查看 1.8K关注 0票数 3

我正在测试在两个游戏之间使用Akka遥控器!v2.1-RC4应用程序。

以下是我来自App1的代码

代码语言:javascript
复制
override def onStart( app: Application ) {

val system = ActorSystem("App1System", ConfigFactory.load.getConfig("app1"))
val remoteActor = Akka.system().actorFor("akka://App2System@127.0.0.1:9003/user/app2Actor")
println(s"remote actor : ${remoteActor.path}")

val jobsActor = Akka.system.actorOf(Props(new Actor {
  def receive = {
    case "Job1" => { println("\nsending Job #1 at regular intervals to App2\n"); remoteActor ! "Job1" } 
    case "Job2" => { println("\n... sending doing job #2, 7 seconds after start, only once\n"); remoteActor ! "Job2" }
  }
}), "app1Actor")

// Repeat every 5 seconds, start 5 seconds after start
Akka.system.scheduler.schedule(
  5 seconds,
  5 seconds,
  jobsActor,
  "Job1"
)

// do only once, 7 seconds after start
Akka.system.scheduler.scheduleOnce(7 seconds, jobsActor, "Job2")
}

下面是App1的配置文件:

代码语言:javascript
复制
 akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "127.0.0.1"
      port = 9002
    }
  }
}

app1 {
  include "common"
}

来自App2的代码:

代码语言:javascript
复制
    override def onStart( app: Application ) {

    val system = ActorSystem("App2System", ConfigFactory.load.getConfig("app2"))
    val app2Actor = Akka.system.actorOf(Props(new Actor {
      def receive = {
        case "Job1" => println("App 2: doing Job #1 at regular intervals")
        case "Job2" => println("App 2: ... doing job #2, 7 seconds after start, only once")
        case _ => println("App 2 recieved other message")
      }
    }), "app2Actor")

    println(s"app 2 actor : ${app2Actor.path}")

  }

来自App2的配置:

代码语言:javascript
复制
akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }

  remote {
  transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "127.0.0.1"
      port = 9003
    }
  }
}

app2 {
  include "common"
}

我遵循了链接Akka - Remoting中的说明

来自App1的我的控制台输出:

代码语言:javascript
复制
[info] application - Application started
[INFO] [02/06/2013 21:56:49.570] [New I/O  worker #1] [NettyRemoteTransport(akka://application@127.0.0.1:9002)] RemoteServerStarted@akka://application@127.0.0.1:9002
[info] play - Starting application default Akka system.
remote actor : akka://App2System@127.0.0.1:9003/user/app2Actor
[info] play - Application started (Dev)

sending Job #1 at regular intervals to App2

[INFO] [02/06/2013 21:56:54.918] [application-akka.actor.default-dispatcher-5] [NettyRemoteTransport(akka://application@127.0.0.1:9002)] RemoteClientStarted@akka://App2System@127.0.0.1:9003

... sending doing job #2, 7 seconds after start, only once 
sending Job #1 at regular intervalsto App2
sending Job #1 at regular intervalsto App2
sending Job #1 at regular intervalsto App2

[info] application - Application stopped
[info] play - Shutdown application default Akka system.
[INFO] [02/06/2013 21:57:10.619] [application-akka.actor.default-dispatcher-16] [NettyRemoteTransport(akka://application@127.0.0.1:9002)] RemoteClientShutdown@akka://App2System@127.0.0.1:9003
[INFO] [02/06/2013 21:57:10.635] [application-akka.actor.default-dispatcher-16] [NettyRemoteTransport(akka://application@127.0.0.1:9002)] RemoteServerShutdown@akka://application@127.0.0.1:9002

来自App2的我的控制台输出:

代码语言:javascript
复制
[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9001

(Server started, use Ctrl+D to stop and go back to the console...)

[info] Compiling 6 Scala sources and 1 Java source to /home/rudy/development/projects/Actor/target/scala-2.10/classes...
[info] application - Actor Application started
[INFO] [02/06/2013 21:50:41.899] [New I/O  worker #1] [NettyRemoteTransport(akka://application@127.0.0.1:9003)] RemoteServerStarted@akka://application@127.0.0.1:9003
[info] play - Starting application default Akka system.
app 2 actor : akka://application/user/app2Actor
[info] play - Application started (Dev)
[INFO] [02/06/2013 21:56:54.961] [application-10] [NettyRemoteTransport(akka://application@127.0.0.1:9003)] RemoteClientStarted@akka://application@127.0.0.1:9002
[INFO] [02/06/2013 21:57:10.626] [application-7] [NettyRemoteTransport(akka://application@127.0.0.1:9003)] RemoteClientShutdown@akka://application@127.0.0.1:9002

我可以看到App1能够在路径上找到App2执行元(没有DeadLetter),但是我期望在App2控制台上看到的任何消息都没有出现。

不知道我在哪里做错了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-07 16:07:24

Akka.system是Play提供的角色系统,您可以将其与您自己的角色系统混合在一起。尝试只使用您自己的参与者系统,即将代码更改为:

代码语言:javascript
复制
val remoteActor = system.actorFor
val jobsActor = system.actorOf
system.scheduler.schedule

val app2Actor = system.actorOf
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14731553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档