远程actor只在localhost上工作

时间:2011-04-21 14:18:46

标签: scala actor

我使用Scala的远程演员编写了一个程序。我的第一步是创建一个通过loopback(127.0.0.1)进行通信的客户端和服务器,它运行良好。当我尝试在同一网络上的两个站之间进行通信时,服务器不会捕获任何内容。我在本地和远程客户端程序之间唯一改变的是服务器的IP地址。

以下是客户端代码:

case class Post(msg: String)

object Client extends Application {
  val client = new ClientRemote
  client.sendMessage
}

class ClientRemote extends Actor {
  val server = select(Node("127.0.0.1", 9010), 'name) //' or server IP

  def sendMessage(): Unit = {
    server ! Post("Hello!")
  }

  def act() {
    // do something
  }
}

这是服务器代码:

case class Post(msg: String)

object Server extends Application {
  val server = new ServerRemote
  server.start
}

class ServerRemote extends Actor {
  def act() {
    alive(9010)
    println("server is started!")
    register('name, self)                  //' register to port
    loop {
      react {
        case Post(msg) => println(msg)
      }
    }
  }
}

有人知道为什么这些程序不起作用或对解决方案有任何想法吗?

感谢

2 个答案:

答案 0 :(得分:0)

您可以在客户端和服务器代码的开头添加“scala.actors.Debug.level = 3”,以获取有关actor子系统正在执行的操作的更多信息。例如,这将告诉您消息是否已收到但是已丢弃,或者是否在其他端口上侦听,等等。

答案 1 :(得分:0)

我对Java的了解比我对Scala的了解更多,但是你可以通过类加载器将Post案例类的重复定义视为不同的类吗?