我有一个小问题。我刚刚将我当前项目的客户端-服务器通信从远程 Scala Actors 移动到远程 Akka Actors。
在我的本地机器上测试时一切正常,但是一旦我尝试在不同的机器上使用客户端和服务器运行代码,客户端就无法再访问服务器(我得到了java.nio.channels.NotYetConnectedException
)。我双重和三重检查了正在使用的 ip 和端口。这是我在代码中与 Scala 演员一起使用的相同主机数据(顺便说一句,它仍然有效。所以显然防火墙设置没有任何变化,服务器在技术上是可以访问的)
以下是代码的重要部分(我主要从 akkas 主页复制粘贴):
在服务器演员
import akka.actor.Actor._
import akka.actor.{Actor, ActorRef, Supervisor}
override def preStart = {
// I also tried the servers external ip here
remote.start(host, 1357)
// SERVER_SERVICE_NAME is a string constant in a trait that both server
// and client extend
// all actual work is refered to SessionActor
remote.registerPerSession(SERVER_SERVICE_NAME, actorOf[SessionActor])
}
在客户端:
import akka.actor.Actor._
import akka.actor.{Actor, ActorRef, Supervisor}
override def preStart = {
// CLIENT_SERVICE_NAME is a string constant
Actor.remote.start("localhost", 5678).register(CLIENT_SERVICE_NAME, self)
// I also tried "Thread sleep 1000" here just in case
// internalServer is a private var of the type Option[ActorRef]
// host and serverPort are actually read from a propertiesfile. Guess this
// doesn't matter. I checked them.
internalServer = Some(
remote.actorFor(SERVER_SERVICE_NAME, host, serverPort)
)
// Again I tried "Thread sleep 1000" here. Didn't help neither
internalServer foreach (server => {
(server !! Ping) foreach (_ match { // !!! this is where the exception is thrown !!!
case Pong => println("connected")
case _ => println("something's fishy")
})
})
}
我正在使用:Scala 2.8.1(虽然我不确定我客户端的机器是 2.8 还是 2.8.1,但我使用的是 akka 发行版中的 scala-library.jar)Akka 1.0
我知道你无法调试我的代码,但我会非常感谢任何提示或想法这里可能出了什么问题。
PS:尝试发送Ping
. 所以我没有费心增加超时时间。