두 기기가 인터넷을 통해 서로 통신해야하는 Android 용 애플리케이션을 작성하고 있습니다. 이 태스크 외에도 REST를 통해 EJB3 서버와 통신한다. 그래서 한 돌로 두 마리의 새를 죽이고 두 쌍의 안드로이드 장치간에 데이터를 전송하기 위해 REST + EJB3를 사용하기로 결정했습니다. 그래서 구현 된 시나리오는 다음과 같습니다.http REST 및 EJB3을 통해 두 개의 Android 앱 연결
- 두 장치가 모두 서버에 연결되어 세션 ID를 획득합니다.
- 첫 번째 장치는 대신이
- 서버가로 데이터를 전송
- 두 번째 장치에서 데이터 요청 대기 풀에두고,
- 서버가 데이터를 얻을 수 있지만, HTTP 요청을 종료하지 않는 두 번째 장치로 데이터를 전송 두 번째 장치는 첫 번째 장치에 대한 대기 연결 (및 스레드)을 해제합니다.
- 첫 번째 또는 두 번째 장치 요청이 없으면 상대방은 서버 측에서 시간 초과를 기다린 다음 요청을 다시 보냅니다. 데이터가 도착한 후 서버 측의 데이터가 즉시 상주 할 때까지 기다려야합니다.
그래서이 스키마에 나는 두 가지 단점을 참조하십시오 를 - 서버 측에서 스레드를 대기 - 그들은 서버 자원을 소비하고 그 결과 제한 서버 처리량으로 - 서버 스레드가 시간 제한과 응답을 기다립니다하지 않을 경우, 클라이언트는 계속해서 요청을 반복하고 많은 트래픽을 소비해야합니다.
이러한 문제를 해결하는 가장 좋은 방법은 무엇입니까?
추신 : 두 기기가 가능한 한 원활하고 신속하게 데이터를 교환해야한다는 사실을 잊어 버렸습니다.
링크를 이용해 주셔서 감사합니다.하지만 1.6 버전부터 Android에서 내 애플리케이션을 실행해야하는 경우 어떻게해야합니까? 지금까지 내가 C2DM 지원이 2.2 버전에서만 추가 된 것을 알았습니다 ... –
푸시가 없으면 "원활하고 신속하게"요구 사항을 달성 할 수 없습니다. 장치 A를 사용하여 서버에 데이터를 쓸 수 있지만 장치 B는 주기적으로 업데이트를 가져와야합니다. 그것을 자주하면 배터리가 곧 죽을 것입니다. 그리고 내가 아는 바로는 당신은 장치와 서버 사이의 연결에 의존 할 수 없습니다. IP가 바뀔 수도 있고 무선 통신이 켜지거나 꺼질 수도 있습니다. – katit
예, 나도이 사실을 알고 있습니다. 그래서 그 질문을했습니다. 그러나 1.6부터 시작된 모든 버전의 솔루션이 필요합니다. 다른 아이디어? –