저는 Akka Remoting을 통해 서버의 Akka 시스템과 통신하는 Android 장치에서 실행되는 Akka 시스템을 보유하고 있습니다.Akka Remoting은 단방향 연결 만 지원합니까?
안드로이드 기기는 어떤 IP 주소라도 얻을 수 있습니다. 응용 프로그램이 실행되는 동안 IP가 변경 될 수 있으며 서버에서 IP에 연결할 수 없습니다. 따라서 나는 akka.remote.netty.hostname = "0.0.0.0"
과 akka.remote.netty.port = 8000
으로 안드로이드 장치에서 Akka를 구성했습니다.
Android Akka 시스템은 서버의 액터에 대한 참조를 가져 와서 메시지를 보내고 서버의 액터는 sender() actorRef를 기록하고 메시지를 다시 보냅니다. 이것은 서버와 안드로이드 장치가 모두 동일한 무선 랜 상에 있고 인터넷을 통해 GPRS를 통해 통화 할 때 작동합니다.
이제 연결 손실에 대해 자세히 살펴보고 다시 연결합니다. 내가 집중하고있는 시나리오는 다음과 같습니다.
- Android 기기와 서버는 모두 wlan에 있습니다.
- Android 기기가 서버에 메시지를 전송합니다.
- Android에서의 Akka 리모팅은
RemoteClientStarted
입니다. - 서버에서의 Akka 리모팅은
RemoteClientStarted
과RemoteServerClientConnected
입니다. - 그런 다음 Android에서 wlan을 끈 다음 몇 초 후에 다시 켜십시오. 그 사이에 서버로 전송 된 메시지가 없습니다.
- 안드로이드에서의 Akka 리모팅은
RemoteClientShutdown
과RemoteClientError
(ETIMEDOUT)입니다. - 서버에서의 Akka 리모팅은 아무런 의미가 없습니다.
- Android가 서버에 메시지를 보냅니다.
- 서버는
RemoteServerClientConnected
을 생성하고 메시지를 수신합니다. - 서버는 안드로이드에 (아래 질문에 대한 를 호출) 메시지를 보내려고하고, 생산 :
RemoteServerError
,RemoteServerClientDisconnected
,RemoteClientShutdown
,RemoteServerClientClosed
. - Android가 서버에서 메시지를받지 못합니다.
- 서버는 다른 메시지를 보내려고하지만, 아 카스
RemoteClient
는 말한다 :- [PassiveRemoteClient @ akka : //[email protected] : 8000] 원격 클라이언트 연결을 시작 아래로
- 종료되었습니다 [ akka : //[email protected] : 8000 | /0.0.0.0]
- RemoteClientError의 @의 akka : //[email protected] : 8000 : 오류 [...
이 마지막 오류는 Akka Remote가 기존 PassiveRemoteClient
을 다시 사용하는 대신 새로운 ActiveRemoteClient
을 생성하려고하므로 발생합니다. 나는 이것이 서버가 RemoteServerClientConnected 이벤트를 관찰하기 전에 서버가/disconnects/shutdowns/clientcloseds 오류를 관찰한다는 것을 다시금 생각할 것입니다.이제
는 질문 :
-
이 시나리오에서 메시지 A를 보낼 때 서버가 안드로이드 장치에서 최종 들어오는 연결 (
- ?
- 서버가 클라이언트에 다시 연결하지 않도록하려면 어떻게해야합니까?
PassiveRemoteClient
를) 다시 어떻게 할 수
버전 :
- 안드로이드 : 15 (4.0.3)
- Akka : 2.1
- 자바 : 1.6 64bit를
- 스칼라 : 2.10.1
- 의 Netty : 3.5 .8
철저한 답변과 특히 작동시키기위한 제안에 감사드립니다. 신속한 후속 조치 :'RemoteTransport'는 Akka 밑에 리모컨을 구현하는 기반으로 보인다. 서류 미비이므로 질문해야합니다. 이것이 권장 방법입니까? 다음 버전의 Akka에서 메커니즘이 크게 바뀔까요? – eirirlar
RemoteTransport가 2로 변경됩니다.2 특별한 응용 프로그램이 자체 응용 프로그램을 만들 수 있다고 생각할 때 우리는 자주 발생하지 않을 것이라고 생각합니다. 배우의 메시지와 관련된 많은 가정들이 귀하의 필요에 부합하지 않을 수 있습니다. –
좋아요, 그럼'RemoteTransport'에서 멀어 질 겁니다. 궁금한 점 : akka-zeromq 테스트를 마쳤습니다. 그것은 나를 위해 수용 할 수없는 zeromq-2.1에 대해 만들어졌습니다. 그래서 zeromq3의 순수 자바 포트라고 생각되는 jeromq를 테스트했습니다. 불행히도 이것은 akka-zeromq와 함께 제공되는 scala-zeromq-binding을 대체하지 못했지만, akka-zeromq 모듈을 포크하고 scaler-zeromq-binding에 대한 의존성을 대신 jeromq로 대체했습니다. , 그러나 안드로이드에 대한 테스트는 여전히 남아 있습니다. – eirirlar