Sto provando a configurare una semplice applicazione server/client akka (utilizzando Akka 2.0.3), ma non è riuscita a connettersi. Precedentemente ecco il codice base:Ottenere un'applicazione remota Akka semplice in esecuzione
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
So che le configurazioni devono essere inserite in file esterni.
Se si sostituisce XXX
con localhost
funziona:
started
Got HEY
Ma se ho usato il mio IP esterno (risolto) (PC dietro il router di casa) per XXX
il messaggio HEY
non arriva mai. Ho pensato che fosse dovuto a qualche problema con il firewall e ho inoltrato le relative porte TCP e UDP sul mio router e aperto/permesso sul mio firewall Windows. Quindi dopo che il codice seguente ha funzionato (anche XXX
sostituito con il mio IP esterno). Un iniziato ServerTest
può essere collegato da un 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")
}
Quindi E'non è un problema di porta/firewall, purtroppo non si è ?! Quindi dov'è il problema???
Akka Remoting non ha a che fare con firewall o NAT: http://akka.io/faq/ –
@Viktor Sebbene risponda alla mia domanda, mi chiedo ancora perché la versione socket sia in grado e akka no. –
@Viktor Ti dispiacerebbe pubblicare il tuo commento come risposta in modo che io possa accettarlo ?! –