2014-01-06 4 views
1

NodeJS 서버와 통신 할 수있는 Android 애플리케이션 개발에 대한 몇 가지 질문이 있습니다.Android + NodeJS : 클라이언트 - 서버 통신

Android 애플리케이션은 일부 데이터를 수집하고 모든 것을 .csv 파일에 저장합니다. 이제이 파일을 NodeJS 서버에 업로드해야합니다. NodeJS 서버는 파일을 저장하고 MongoDB에 내용을 저장해야합니다.

이제 내 질문에 어떻게 안드로이드 장치와 서버 사이의 통신을 구현해야합니다.

DataOutputStream과 함께 HttpURLConnection을 사용하여 NodeJS 서버에 단일 파일을 업로드하는 방법을 알고 있습니다. 하지만 각 Android 기기를 고유하게 식별해야하기 때문에 파일을 업로드하는 것 이상을 필요로합니다.

기기를 구별하기 위해 (암호화 된) Google 계정 이메일 주소를 사용하는 것에 대해 생각했습니다. 나는 누구에게 어떤 데이터를 업로드하는지에 관심이 없지만 각 장치에 대한 데이터를 별도로 저장해야합니다.

문제는 장치와 서버간에 통신하는 방법을 모르겠다는 것입니다. HttpURLConnection 및 DataOutptStream을 통해 파일을 업로드하는 경우 장치의 고유 키와 같은 추가 정보없이 파일을 업로드 할 수있는 것처럼 보입니다.

또한 소켓을 통해 파일을 업로드하는 것에 대해 생각했습니다. 하지만 거대한 파일 크기 (5MB 이상)를 처리하는 방법을 모르겠습니다.

코드 조각을 찾고 있지 않습니다. 오히려 올바른 방향에 대한 힌트가 필요합니다. 바라기를 나의 문제점은 명확하게 진술되고 누군가는 이것으로 저를 도울 수있다.

답변

2

Android 측에서 HttpUrlConnection을 사용하고 노드 측에서 RESTful 서버를 사용하는 것이 간단합니다.

당신은 편안한 방법으로 URL에 정보를 포함 할 수 있습니다 :

  • pathParam : www.address.com/api/save/{clientId}/data
  • queryParam : www.address.com/ api/save/data? c = {clientID}

각각은 클라이언트를 고유하게 식별합니다. 이것은 당신이 선택한 어떤 계획이 될 수 있습니다. URI가 고유하고 중요하므로 매번 HttpUrlConnection을 빌드해야합니다!

서버 쪽에서는 URL을 라우팅 할 수 있습니다. 노드에는이를 지원하기위한 여러 가지 패키지가 있습니다 (Express, Restify 등). 기본적으로 DB에 저장할 요청 본문을 가져 오지만 다른 매개 변수도 사용할 수 있으므로 모두 고유하고 분리 된 트랜잭션입니다.

편집 : RESTful 처리를 위해 사용하는 패키지는 큰 파일도 스트리밍 할 수 있습니다. 데이터가 서버에 완전히 업로드되면 요청 처리가 실제로 시작될 수 있습니다.

+0

이 답변을 주셔서 감사합니다. 내게 좋은 방법을 구현하는 소리. – Siggy

1

소켓을 사용하는 것이 거의 비슷합니다. 가장 어려운 부분은 실제로는 매우 간단 할 수있는 '자신의 프로토콜 만들기'입니다.

54::{filename:'myfilename.txt',length:13023,hash:'ss23vd'}xxxxxxxxxxx... 

json으로 TXT
:: = 길이와 JSON 사이의 구분의 54 = 길이
{JSON} = 추가

이 같은 소켓에 데이터를 전송하여 한번에

업로드 한 파일 필요한 데이터
xxx... = 13023 바이트의 데이터

그런 다음 모든 데이터가 전송되면 연결 ... 또는 다른 파일을 보내야하는 경우 다음 데이터 세트가 있어야하는 위치를 알 수 있습니다.

node.js가 javascript이기 때문에 이미 JSON을 구문 분석 할 수있는 훌륭한 JSON 지원이 있습니다.


소켓을 사용 하시겠습니까? 아마도 그렇지 않습니다. 동시에 추가 파일을 업로드해야하는 경우 HTTP 및 node.js HTTP 모듈이 더 나은 작업을 수행 할 수 있습니다. 그러나 아무것도 변하지 않을 것이라는 것을 보장 할 수 있다면, 그럴 필요는 없습니다.하지만 개발을 향한 태도는 나쁜 태도입니다.

+0

이 답변을 주셔서 감사합니다. 나는 또한 소켓으로 이것을하는 것이 다소 잘못되었다고 생각했다. 클레이 (Clay)가 그의 대답에 쓴 방식대로 구현하려고 노력할 것이다. – Siggy