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

时间:2014-01-06 15:49:22

标签: android node.js client-server

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

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

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

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

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

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

我还考虑过通过套接字上传文件。但我不知道如何处理大文件(5 MB或更多)。

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

2 个答案:

答案 0 :(得分:3)

在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处理的包也可以为您流式传输大型文件。一旦数据完全上传到服务器,就可以真正开始处理请求。

答案 1 :(得分:1)

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

通过将数据发送到套接字来实时上传1个文件,如下所示:

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

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

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

由于node.js是javascript,你已经拥有了很棒的JSON支持来为你解析JSON。


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