2011-05-16 4 views
1

두 기기가 인터넷을 통해 서로 통신해야하는 Android 용 애플리케이션을 작성하고 있습니다. 이 태스크 외에도 REST를 통해 EJB3 서버와 통신한다. 그래서 한 돌로 두 마리의 새를 죽이고 두 쌍의 안드로이드 장치간에 데이터를 전송하기 위해 REST + EJB3를 사용하기로 결정했습니다. 그래서 구현 된 시나리오는 다음과 같습니다.http REST 및 EJB3을 통해 두 개의 Android 앱 연결

  • 두 장치가 모두 서버에 연결되어 세션 ID를 획득합니다.
  • 첫 번째 장치는 대신이
  • 서버가로 데이터를 전송
  • 두 번째 장치에서 데이터
  • 요청 대기 풀에두고,
  • 서버가 데이터를 얻을 수 있지만, HTTP 요청을 종료하지 않는 두 번째 장치로 데이터를 전송 두 번째 장치는 첫 번째 장치에 대한 대기 연결 (및 스레드)을 해제합니다.
  • 첫 번째 또는 두 번째 장치 요청이 없으면 상대방은 서버 측에서 시간 초과를 기다린 다음 요청을 다시 보냅니다. 데이터가 도착한 후 서버 측의 데이터가 즉시 상주 할 때까지 기다려야합니다.

그래서이 스키마에 나는 두 가지 단점을 참조하십시오 를 - 서버 측에서 스레드를 대기 - 그들은 서버 자원을 소비하고 그 결과 제한 서버 처리량으로 - 서버 스레드가 시간 제한과 응답을 기다립니다하지 않을 경우, 클라이언트는 계속해서 요청을 반복하고 많은 트래픽을 소비해야합니다.

이러한 문제를 해결하는 가장 좋은 방법은 무엇입니까?

추신 : 두 기기가 가능한 한 원활하고 신속하게 데이터를 교환해야한다는 사실을 잊어 버렸습니다.

답변

2

메시지가 A에서 B로 전송 될 필요가있을 때 당신은 C2DM http://android-developers.blogspot.com/2010/05/android-cloud-to-device-messaging.html

를 사용해야합니다 - A가 서버에 연결하고 데이터 종류/양에 따라해야 - 서버가 하나 C2DM를 통해 데이터를 밀어하거나 말할 것이다 장치 B가 돌아와 데이터를 가져옵니다.

나는 어쨌든 서버에 데이터를 저장합니다. 푸시가 실패하면 다시 시도 할 수 있습니다. 휠을 재발견 할 필요가 없습니다. C2DM에서 이미 해결 된 대부분의 문제/문제

+0

링크를 이용해 주셔서 감사합니다.하지만 1.6 버전부터 Android에서 내 애플리케이션을 실행해야하는 경우 어떻게해야합니까? 지금까지 내가 C2DM 지원이 2.2 버전에서만 추가 된 것을 알았습니다 ... –

+0

푸시가 없으면 "원활하고 신속하게"요구 사항을 달성 할 수 없습니다. 장치 A를 사용하여 서버에 데이터를 쓸 수 있지만 장치 B는 주기적으로 업데이트를 가져와야합니다. 그것을 자주하면 배터리가 곧 죽을 것입니다. 그리고 내가 아는 바로는 당신은 장치와 서버 사이의 연결에 의존 할 수 없습니다. IP가 바뀔 수도 있고 무선 통신이 켜지거나 꺼질 수도 있습니다. – katit

+0

예, 나도이 사실을 알고 있습니다. 그래서 그 질문을했습니다. 그러나 1.6부터 시작된 모든 버전의 솔루션이 필요합니다. 다른 아이디어? –

관련 문제