2014-06-18 4 views
3

안드로이드 전화에서 서버로 데이터를 보내야하는 경우가 아주 많습니다. (배터리는 문제가되지 않습니다). 나는이 목적을 위해 표준 Java URL 연결을 사용하거나 SocketChannel을 사용하여 사용자 정의 소켓 구현을 만드는 것이 괜찮은지 여부에 대해 스스로 논의하고 있습니다. 나는 양쪽 끝점을 완벽하게 제어 할 수 있으며 원하는 것을 자유롭게 선택할 수 있습니다. 이러한 각 방법의 장단점은 무엇입니까? 다른 접근법? 이미 Google XMPP를 사용해 보았습니다. 그러나 많은 데이터 포인트가 감소하고있는 것으로 나타났습니다. 그것에 대한 Google의 응답을받지 못했습니다.안드로이드에서 HTTP 또는 소켓을 사용하십시오.

안정성에 대한 주요 관심사입니다. 물론 라디오 링크 자체에는 문제가없는 한 모든 샘플을 실시간으로 받아야합니다. 몇 가지 지침을 제공하십시오.

답변

0

나는 다양한 옵션을 고려했다 : http, xmpp, 사용자 정의 소켓 구현 .. 마침내 나는 우연히 만났다. https://github.com/Gottox/socket.io-java-client. 고통없이 일했습니다. 나는 곧바로 일어나서 달리고 있었다! 물론 이전 프로젝트에서 socket.io를 사용하는 데 도움이되었습니다. socket.io 용 Java 클라이언트가있을 것이라고는 상상도하지 못했습니다! 올바른 질문을하지 않는 것 같아요. 지금까지이 솔루션은 매우 잘 작동하고 있습니다. 업데이트가 있으면 테스트하고 게시 할 것입니다. 영구 실시간 통신을 구현해야하는 경우이 옵션을 고려하십시오.

0

소켓 TCP 연결 :

  • (+) 신뢰할 수있는 배달 인해 TCP 패킷을 재전송한다.
  • (-) 비표준 포트/프로토콜이 많은 모바일 인터넷 제공 업체에 의해 차단되었습니다.
  • (-) 패킷 재전송은 지연을 유발할 수 있으며 따라서 실시간이 아닙니다.

UDP 소켓 연결

  • (+) 패킷은 이들 방법 중 가장 낮은 지연을 통해 수신 오면.
  • (-) 표준이 아닌 포트/프로토콜이 많은 모바일 인터넷 제공 업체에 의해 차단되었습니다.
  • (-) 신뢰할 수없는 전송, 패킷이 복제되거나 잘 리거나 삭제 될 수 있습니다.

HttpURLConnection의 :

  • (+) 많은 사용자가 HTTP (80)와 HTTPS (443 옆에있는 귀하의 응용 프로그램 (많은 모바일 인터넷 사업자 블록 포트를 사용) 및 HTTP를위한 (깊은 패킷 검사를 사용할 수 있습니다)에 프로토콜이 준수되었는지 확인하십시오).
  • TCP 재전송 및 프록시로 인해 가장 안정적입니다.
  • (-) TCP 패킷 재전송으로 인해 지연이 발생할 수 있으며 따라서 실시간이 아닙니다.
  • (-) 프록시가 지연을 추가하여 실시간 기능이 더 떨어질 수 있습니다.
+0

또한 HTTP를 생성하는 오버 헤드로 인해 응용 프로그램이 TCP를 사용하는 것보다 더 많은 데이터 사용량을 갖게 될 것입니다 –

0

데이터를 꽤 자주 전송해야하는 경우 소켓을 사용하는 것이 좋습니다. 연결을 오랫동안 열어 놓고 동일한 채널 내에서 패킷을 보내고 전송할 때마다 다시 열 때 리소스를 낭비하지 않아도됩니다.