Próbuję skonfigurować prostą aplikację serwer/klient akka (przy użyciu Akka 2.0.3), ale nie udało się nawiązać połączenia. Wcześniej oto kod podstawowy:Uzyskaj prostą aplikację zdalnego dostępu do sieci Działa
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
wiem, że konfiguracje powinny być umieszczone w zewnętrznych plikach.
Jeśli zastąpić XXX
z localhost
to działa:
started
Got HEY
Ale jeśli użyłem zewnętrznego (rozwiązany) IP komputera za routerem (domu) na XXX
komunikat HEY
nigdy nie nadejdzie. Pomyślałem, że to z powodu jakiegoś problemu z firewallem i przesłałem odpowiednie porty TCP i UDP do mojego routera, a także otworzyłem/zezwalałem na moją zaporę Windows. Więc po tym działał poniższy kod (także XXX
zastąpiony moim zewnętrznym IP). Uruchomionym ServerTest
można podłączyć przez ClientTest
:
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")
}
więc jest to nie problem port/firewall, isnt to ?! Więc gdzie jest problem ???
Akka Remoting nie ma do czynienia z firewalli lub NAT: http://akka.io/faq/ –
@Viktor Chociaż its odpowiedzi na moje pytanie, mam wciąż zastanawiasz się dlaczego wersja gniazdko jest w stanie i Akka nie jest. –
@Viktor Czy mógłbyś opublikować swój komentarz jako odpowiedź, abym mógł go zaakceptować ?! –