Estoy tratando de configurar una aplicación simple de servidor/cliente akka (usando Akka 2.0.3), pero no se pudo conectar. De antemano aquí está el código básico:Obtener la aplicación Akka remota simple Ejecutando
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
Sé que las configuraciones deben colocarse en archivos externos.
Si reemplaza XXX
con localhost
funciona:
started
Got HEY
Pero si he usado mi IP externa (resueltos) (PC detrás de router) para XXX
el mensaje HEY
nunca llega. Pensé que se debía a un problema de firewall y reenvío los puertos TCP y UDP relacionados a mi enrutador y también los abrí/los permití en mi firewall de Windows. Así que después de que el siguiente código funcionó (también XXX
reemplazado con mi IP externa). Un iniciado ServerTest
se pueden conectar por 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")
}
así que es no es un problema puerto/servidor de seguridad, ¿o no ?! ¿¿¿Entonces, dónde está el problema???
Akka Remoting no trata con firewalls o NAT: http://akka.io/faq/ –
@Viktor Aunque responde mi pregunta, todavía me pregunto por qué la versión de socket es capaz y akka no. –
@Viktor ¿Te importaría publicar tu comentario como respuesta para que yo pueda aceptarlo? –