Android + NodeJS:客户端 – 服务器通信

我有一些关于开发Android应用程序的问题,它应该能够与NodeJS服务器进行通信。

Android应用程序收集一些数据并将所有内容保存在.csv文件中。 现在需要将该file upload到NodeJS服务器。 NodeJS服务器应该保存文件以及将内容存储在MongoDB中。

我现在的问题是我应该如何实现Android设备和服务器之间的通信。

我知道如何使用具有DataOutputStream的HttpURLConnection将单个file upload到NodeJS服务器。 但我需要的不仅仅是上传文件,因为我需要每个Android设备的唯一标识。

我想过使用(encryption的)Google帐户的用户电子邮件地址来区分设备。 我不知道谁上传哪些数据,但我需要分别存储每个设备的数据。

问题是我不知道如何在设备和服务器之间进行通信。 如果我通过HttpURLConnection和DataOutptStream上传文件,似乎我只能上传文件,没有任何附加信息,如设备的唯一密钥。

我也想通过套接字上传文件。 但我不知道如何处理巨大的文件大小(5 MB或更多)。

我不在寻找代码片段。 我需要一些提示,以正确的方向。 希望我的问题清楚地说明了,有人可以帮助我。

在Android端使用HttpUrlConnection,在Node端使用RESTful服务器将是一个直接的select。

您可以以REST方式将信息embedded到URL中:

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

每个唯一标识客户端。 这可以是你select的任何scheme。 您将不得不每次构buildHttpUrlConnection作为URI是唯一的,重要!

然后,服务器端可以路由的URL,但你认为合适的。 Node有很多包来帮助(Express,Restify等)。 基本上,你会抓住请求的主体存储到你的数据库,但其他参数也可用,所以这是一个独特的和分离的事务。

编辑:您用于RESTful处理的软件包也可以为您传输大文件。 一旦数据完全上传到服务器,处理请求就可以开始。

使用套接字几乎是一样的容易。 最困难的部分将是“制定自己的协议”,实际上可能是非常简单的。

上传1个文件在这个时候发送数据到这个sockets:

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

54 = JSON文本的长度
:: =长度和JSON之间的分隔符
{JSON} =您需要的其他数据
xxx... = 13023字节的数据

然后一旦所有的数据发送,你可以断开…或者如果你需要发送另一个文件,你知道下一组数据应该在哪里。

而且由于node.js是javascript,你已经有了很好的JSON支持来为你parsingJSON。


我会build议使用套接字吗? 可能不会。 因为如果您必须同时上传其他文件,HTTP和node.js HTTP模块可能会做得更好。 但如果你能保证什么都不会改变的话,那么为什么不呢?但是对于发展来说,这是一种不好的态度。