2014-01-06 66 views
1

我对开发一个能够与NodeJS服务器通信的Android应用程序有一些疑问。Android + NodeJS:客户端 - 服务器通信

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

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

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

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

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

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

我不是在寻找代码片段。我宁愿需要一些提示,以正确的方向。希望我的问题明确表达出来,有人可以帮助我解决这个问题。

回答

2

在Android端使用HttpUrlConnection,在Node端使用RESTful服务器将是一个直截了当的选择。

你可以在一个RESTful的方式将信息嵌入到URL:

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

每个唯一标识客户端。这可以是你选择的任何方案。您必须每次构建HttpUrlConnection,因为URI是唯一的,并且很重要!

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

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

+0

非常感谢你的回答。听起来像是一个实施它的好方法。 – Siggy

1

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

上传1文件在时刻通过像这样将数据发送到套接字:

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

54 =长度JSON TXT
:: =长度和JSON之间的分隔符的
{JSON} =附加数据需要
xxx... = 13023字节的数据

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

而且由于node.js是javascript,因此您已经拥有精彩的JSON支持来为您解析JSON。


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

+0

感谢您的回答。我也有这样的感觉,用套接字做这件事有点不对。我会尽力按照克莱在他的回答中所写的方式来实现它。 – Siggy