안녕하세요.
제가 지금 만들고 있는 프로그램은 이렇습니다.
안드로이드 단말 여러 대와 웹 서버(파이썬 Flask) 한 대가 있습니다.
웹 서버의 디비에는 안드로이드 단말 각각에 대한 정보가 저장되어 있습니다.
안드로이드 A가 웹 서버에 안드로이드 B에 대한 자료를 요청하면 이 웹 서버는 안드로이드 B에게 정보 공개 허락 여부를 묻습니다.
안드로이드 B가 웹 서버로 부터 요청을 받으면 B는 A의 정보를 확인하고 A에게 정보 공개를 원하면 '허락'을, 원하지 않으면 '불허'를 웹 서버에 전달합니다.
웹 서버는 안드로이드 B의 허락 여부를 받아 '허락'이면 자료를 요청했던 안드로이드 A에게 안드로이드 B의 정보를 넘겨줍니다.
문제는 통신 방법입니다.
현재 구상하고 있는 방법은 안드로이드 A에서 HTTP로 웹 서버에 정보를 요청하고 웹 서버는 안드로이드 B에 소켓 통신으로 연결해 허락 여부를 받고 난 후 안드로이드 A에 HTTP로 값을 반환하는 방식입니다.
질문드리겠습니다.
1. 웹 서버에서 안드로이드 B에 연결을 요청할 때 소켓으로 통신하면 안드로이드 B가 언제 응답할 지 모르는 상황에서 양쪽 모두 소켓이 계속 열려있어 웹 서버의 자원이 너무 낭비되지 않나요? 다수의 안드로이드 단말이 동시에 웹 서버에 접근해서 다른 단말의 정보를 요구하는 상황을 가정하면 낭비가 더 심할 것 같다는 생각이 듭니다.
2. 보통의 경우처럼 웹 서버에서 연결을 요청한 단말에 값을 리턴하는 것이 아닌, 웹 서버에서 먼저 연결 요청을 하지 않은 안드로이드 B에 연결을 요청하여 그 단말로 부터 리턴값을 받아야 할 때 보통 어떤 프로토콜을 사용하나요? 즉, 웹 서버에서 안드로이드 단말 방향으로 통신 요청을 할 때 주로 어떤 방식을 사용하나요? HTTP도 사용하나요? HTTP를 사용하게 된다면 안드로이드 B는 HTTP 서버로 역할을 하며 항상 포트를 열어두어야 하지 않나요?
웹 서버가 다시 클라이언트가 되어 안드로이드 단말로 연결 요청을 하는 프로그램은 처음인지라 잘 모르겠네요.
고수님들 답변 부탁드립니다.