Ich versuche, eine einfache Server/Client-akka (mit Akka 2.0.3) -Anwendung einzurichten, aber es konnte keine Verbindung hergestellt werden. Zuvor ist hier der Grundcode:Get Simple Remote Akka-Anwendung ausgeführt
import com.typesafe.config.ConfigFactory
import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props
class Server extends Actor {
def receive = {
case s: String => println("Got " + s)
}
}
val serverSystem = ActorSystem("server", ConfigFactory.load(ConfigFactory.parseString("""
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
netty {
hostname = "localhost"
port = 5678
}
}
}
""")))
val server = serverSystem.actorOf(Props[Server], name = "server")
Thread.sleep(500)
println("started")
Thread.sleep(500)
val clientSystem = ActorSystem("client", ConfigFactory.load(ConfigFactory.parseString("""
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
}
""")))
val remoteServer = clientSystem.actorFor("akka://[email protected]:5678/user/server")
remoteServer ! "HEY"
Thread.sleep(3000)
clientSystem.shutdown
serverSystem.shutdown
Ich weiß, dass die Konfigurationen in externen Dateien platziert werden sollten.
Wenn Sie XXX
mit localhost
ersetzen es funktioniert:
started
Got HEY
Aber wenn ich meine externe (aufgelöst) IP (PC hinter der Home-Router) verwendet für XXX
die HEY
Nachricht kommt nie an. Ich dachte, es liegt an einem Firewallproblem und hat die zugehörigen TCP- und UDP-Ports an meinem Router weitergeleitet und auch an meiner Windows-Firewall geöffnet/erlaubt. Danach funktionierte folgender Code (auch XXX
ersetzt durch meine externe IP).
import java.net.ServerSocket
object ServerTest extends App {
println("START server")
val ss = new ServerSocket(5678)
val s = ss.accept()
println(s)
println("END")
}
import java.net.Socket
object ClientTest extends App {
println("START client")
val s = new Socket("XXX", 5678)
println(s)
println("END")
}
So es ist nicht ein Port/Firewall-Problem, nicht wahr ?!: A gestartet ServerTest
kann durch eine ClientTest
angeschlossen werden Also wo ist das Problem ???
Akka Remoting befasst sich nicht mit Firewalls oder NAT: http://akka.io/faq/ –
@Viktor Obwohl es meine Frage beantwortet, frage ich mich immer noch, warum die Socket-Version in der Lage ist und akka nicht. –
@Viktor Würde es dir etwas ausmachen, deinen Kommentar als Antwort zu posten, damit ich ihn akzeptieren kann ?! –